matplotlib使用

news2025/9/15 7:51:41

文章目录

    • 基本语法
      • 导入库
      • plt 和ax.区别
    • ax. 用法
      • 子图创建-展示不同的分区区域
      • 设置刻度范围:
      • 显示刻度
      • 设置刻度标签
      • tick_params()函数
      • 添加轴坐标标签,表头,图例
    • plt.用法
      • 普通折线图
      • plt.plot(x,y,format_string,**kwargs)函数说明:
      • 中文显示`plt.rcParams["font.family"]="SimHei"`
    • matplotlib画柱状图
      • plt.bar()、plt.barh()参数解释
      • plt.bar()综合应用
      • plt.barh()画甘特图

基本语法

导入库

import matplotlin.pyplot as plt
import numpy as np

plt 和ax.区别

  • plt. 先生成一个画布,在画布中生成的区域进行画图,当然plt也可以划分区域plt.subplot(111)
  • ax. 先生成一画布,在画布上选定一个区域进行画图add_subplot(xyz)第一个数字x代表行数,第二个数字y代表列数,第三个数字z表示取第z个小区域(先取第一行,从左到右)
  • 但是撇开位置不讲,两个图形没有图像上的区别

plt.

fig=plt.figure(num=1,figsize=(6,4))# 创建一个图形底板
plt.plot([1,2,3,4],[1,2,3,4])
# plt也可以直接划分区域
# plt.subplot(111)
plt.show()

在这里插入图片描述

ax.

fig=plt.figure(num=1,figsize=(4,4))
#  add_subplot(xyz)第一个数字x代表行数,第二个数字y代表列数,第三个数字z表示取第z个小区域(先取第一行,从左到右)
ax=fig.add_subplot(231)
plt.plot([1,2,3,4],[1,2,3,4])
plt.show()

在这里插入图片描述


ax. 用法

PS:以下使用ax.,使用plt.可跳下面

子图创建-展示不同的分区区域

  • 在画图之前,一般在画布上选定一个区域然后创建子图,如:
fig=plt.figure(num=1,figsize=(4,4))
ax1=fig.add_subplot(221)###可从图中看到,我们的画布是分为2x2的区域
ax1.plot([1,2,3,4],[1,2,3,4])
ax2=fig.add_subplot(222)
ax2.plot([1,2,3,4],[2,2,3,4])
ax3=fig.add_subplot(223)
ax3.plot([1,2,3,4],[1,2,2,4])
ax4=fig.add_subplot(224)
ax4.plot([1,2,3,4],[1,2,3,3])

plt.show()

在这里插入图片描述

设置刻度范围:

ax.set_xlim(1,7.1)#x轴从1到7.1
ax.set_ylim(40,100)#y轴从40到100

显示刻度

#设置显示的刻度
ax.set_xticks(np.linspace(1,7,7))#np.linspace()函数为等差数列,1至7的7个数组成的等差数列1,2,3,4,5,6,7,
ax.set_yticks(np.linspace(50,100,6))#关于等差数列,想了解的可以参看numpy的用法

设置刻度标签

#设置刻度标签
ax.set_xticklabels(["星期一","星期二","星期三","星期四","星期五","星期六","星期日"],fontproperties="SimHei"\
,fontsize=12)
#这里用到了属性fontproperties可以单独设置x轴标签的字体,也可以用fontsize设置字体大小,还可以用color
 设置字的颜色

ax.set_yticklebels(["50kg","60kg","70kg","80kg","90kg","100kg"],fontsize=12)

在这里插入图片描述

tick_params()函数

  • axis: 可选"x",“y”,“both”,默认"both",分别代表,对x轴操作,对y轴操作,对两个轴都操作。
  • direction: 可选 “in”,“out”,"inout"代表,刻度线显示在坐标轴里面,坐标轴外边,双边

添加轴坐标标签,表头,图例

ax.set_xlabel("星期")#添加x轴坐标标签,后面看来没必要会删除它,这里只是为了演示一下。
ax.set_ylabel("销售量",fontsize=16)#添加y轴标签,设置字体大小为16,这里也可以设字体样式与颜色

ax.set_title("某某水果店一周水果销售量统计图",fontsize=18,backgroundcolor='#3c7f99'\
fontweight='bold',color='white',verticalalignment="baseline")#标题(表头)


plt.用法

PS:以下使用plt.

普通折线图

  • 只指定一个数组元素时,表示为纵坐标的值,横坐标默认是数组下标
  • 也可以直接都指定横坐标和纵坐标
# 纵坐标折线图
fig=plt.figure(num=1,figsize=(6,4))# 创建一个图形底板
plt.plot([3,1,4,5,2])# 只指定一个数组元素,表示为中坐标的值,横坐标默认是数组下标
plt.ylabel("Grade")
plt.savefig("test1",dpi=600)# dpi 修改输出质量,表示每一英寸内像素点的值
plt.show()
# 横坐标和纵坐标折线图
plt.ylabel("Grade")
plt.plot([0,2,4,6,8],[3,1,4,5,2])# 指定横坐标和纵坐标
plt.axis([0,10,0,6])# 表示横坐标的尺度为[0,10],纵坐标为[0,6]
plt.show()

plt.plot(x,y,format_string,**kwargs)函数说明:

  • x:x轴的数据,列表或者数组,可选
  • y:y轴数据,列表或者数组
  • format_string:控制曲线的格式字符串,可选,,可选由颜色字符、风格字符和标记字符组成。
  • kwargs:第二组或者更多(x,y,format_string)
颜色字符说明
‘b’蓝色
‘g’绿色
‘r’红色
‘c’青绿色 cyan
‘m’洋红色 magenta
‘y’黄色
‘k’黑色
‘w’白色
‘0.8’灰度值字符串
风格字符说明
‘-’实线
‘–’破折线
‘-.’点划线
‘:’虚线
‘’ ’ ’无线条
标记字符说明
‘.’点标记
‘o’实心圈标记
‘^’上三角标记
'*'星形标记
‘+’十字标记
‘x’x标记
# 展示不同的函数画图
a=np.arange(10)
plt.plot(a,a*1.5,'go-',a,a*2.5,'rx',a,a*3.5,'*',a,a*4.5,'b-.')
plt.show()

在这里插入图片描述

中文显示plt.rcParams["font.family"]="SimHei"

  • 加入以上代码,中文就可以正常显示
    属性
    在这里插入图片描述
  • 字体选择
    在这里插入图片描述
matplotlib.rcParams['font.family']='STSong'
matplotlib.rcParams['font.size']=20# 字体大小
a=np.arange(0.0,5.0,0.02)
plt.xlabel("横轴:时间")
plt.ylabel("纵轴:振幅")
plt.plot(a,np.cos(2*np.pi*a),'r--')
plt.show()

上面都是简单语法介绍,下面开始画甘特图,这个在python可视化中是非常重要的

matplotlib画柱状图

plt.bar()、plt.barh()参数解释

plt.bar():正常柱状图📊📊,常见的统计图;
plt.barh():横向的柱状图,可以理解为正常柱状图旋转了90°。

plt.bar()

plt.bar(x, height, width=0.8, bottom=None, *, align='center', data=None, **kwargs)
  • x:表示x坐标,数据类型为int或float类型,刻度自适应调整;也可传dataframe的object,x轴上等间距排列;
  • height:表示柱状图的高度,也就是y坐标值,数据类型为int或float类型
  • width:表示柱状图的宽度,取值在0~1之间,默认为0.8;
  • bottom:柱状图的起始位置,也就是y轴的起始坐标
  • align:柱状图的中心位置,默认"center"居中,可设置为"lege"边缘;
  • color:柱状图颜色;
  • edgecolor:边框颜色;
  • linewidth:边框宽度;
  • tick_label:下标标签;
  • log:柱状图y周使用科学计算方法,bool类型;
  • orientation:柱状图是竖直还是水平,竖直:“vertical”,水平条:“horizontal”;

示例代码:

import matplotlib.pyplot as plt
import numpy as np

y=[20,30,15,25,15]
N=5
index=np.arange(N)
plt.bar(x=index,height=y)
plt.show()

在这里插入图片描述

plt.barh()

plt.barh(y, width, height=0.8, left=None, *, align='center', **kwargs)
  • y:表示y坐标,数据类型为int或float类型,刻度自适应调整;也可传dataframe的object,y轴上等间距排列;
  • width:表示柱状图的长度,也就是x坐标值,数据类型为int或float类型;
  • height:表示柱状图的高度,取值在0~1之间,默认为0.8;
  • 其他参数与plt.bar()类似。
import matplotlib.pyplot as plt
import numpy as np

y=[20,30,15,25,15]
N=5
index=np.arange(N)
# plt.bar(x=index,height=y)
# plt.show()

plt.barh(y=index,width=y)
plt.show()

在这里插入图片描述

plt.bar()综合应用

import matplotlib as mpl
import matplotlib.pyplot as plt
from matplotlib.pyplot import MultipleLocator
from matplotlib import ticker
%matplotlib inline


# 第一个坐标轴和图
fig = plt.figure(figsize=(8,5), dpi=80)
ax = fig.add_subplot(1,1,1)
plt.subplot(1, 1, 1)

# 画多个图,传递多个不同的x轴刻度
x = [i for i in range(25)]  # x轴标准刻度
x1 = [i-0.2 for i in range(25)]  # 第一个图x轴左偏移0.2
x2 = [i+0.2 for i in range(25)]  # 第二个图x周右偏移0.2,防止重叠
xx = data3['sku_pri'].to_list()  # x周的刻度显示

ax.set_ylabel('y轴1的名称')
ax.set_xlabel('x周名字')
plt.bar(x1, data3['num_sales']/10000, width=0.4, label='第一张图')
plt.ylim(0,4000)
plt.xticks(x,xx)  # x周刻度显示
plt.title('plt.plot()综合应用')
ax.legend(loc='upper left')

# 第二个坐标轴和图
ax2 = ax.twinx()
ax2.spines['right'].set_position(('axes', 1.0))
ax2.set_ylabel('y轴2的名称')
plt.bar(x2, data3['lk_num']/10000, width=0.4, color='orange', label='第二张图')
plt.ylim(0,200)
plt.xticks(x,xx)
ax2.legend(loc='upper center')

# 第三个坐标和图
ax3 = ax.twinx()
ax3.spines['right'].set_position(('axes', 1.1))  # 1.1向右便宜避免重叠
ax3.set_ylabel('y轴3的名称')
plt.plot(x, data3['lk_ra'], marker='*',color='purple', label='第三张图')
plt.ylim(0,0.12)

# y轴3设置刻度未百分比
ax3.yaxis.set_major_locator(MultipleLocator(0.02))
ax3.yaxis.set_major_formatter(ticker.PercentFormatter(xmax=1, decimals=0))
plt.xticks(x,xx)

ax3.legend(loc='upper right')

# plt.savefig('保存图片名称'+'.png')
plt.show()

在这里插入图片描述

plt.barh()画甘特图

数据如下:
python读取excel需要了解的知识点这里!!!

在这里插入图片描述
在这里插入图片描述

代码:
ps:注释掉的colors的那个配色更好看

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
from colour import Color
# import xlrd 引擎


# 正常显示中文和符号
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False

# 读取数据表,获取工位加工时长和各个工位开始加工时间
df1=pd.read_excel('test.xls',sheet_name='continue_time',index_col='YM')
df2=pd.read_excel('test.xls',sheet_name='start_time',index_col='YM')
# print(df1.head())
# print(df2.head())

CJS=['CJ1','CJ2','CJ3','CJ4']
YMS=['YM4','YM5','YM2','YM7','YM10','YM1','YM8','YM6','YM3','YM9']

# continue_time:各个工位加工时长,start_time:各个工位开始加工时间
continue_time=[]
start_time=[]

for cj in CJS:
    continue_time.append([ym for ym in df1[cj][YMS]])
    start_time.append([ym for ym in df2[cj][YMS]])

print("continue_time:",continue_time)
# print("start_time:",start_time)

# 获取数组大小,用于之后的循环
m=range(len(continue_time)) # 4 个机器
n=range(len(continue_time[0])) # 10 个工件

# print("m=%s,n=%s" %(m,n))

# 绘图
# 指定每一个水平柱子颜色
# red=Color('red')
# colors=list(red.range_to(Color('purple'),14))
# colors=[color.rgb for color in colors]
# print("colors:",colors)

colors = ['r', 'pink', 'orange', 'y', 'g', 'b', 'deeppink', 'purple', 'brown', 'black']

# 设置画布大小和分辨率
plt.figure(figsize=(20,8),dpi=200)

# barh:水平柱状图,设置循环迭代以绘制层叠效果
for i in m:
    for j in n:
        plt.barh(m[i] + 1, continue_time[i][j], left=start_time[i][j], color=colors[j])
        # print("机器=%s,工件=%s---------------------------" %(i,j))
        # print("m[i] + 1=%s, continue_time[i][j]=%s, left=start_time[i][j]=%s" % ( m[i] + 1, continue_time[i][j], start_time[i][j]))

plt.title('疫苗生产甘特图',fontsize=17)

# 命名
labels=['']*len(continue_time[0]);
for f in n:
    labels[f]='YM%d'%(f+1)
print(labels)

# 添加图例
patches=[mpatches.Patch(color=colors[i],label="{:s}".format(labels[i])) for i in range(len(continue_time[0]))]
plt.legend(handles=patches,loc=4)

# XY标签
plt.xlabel('加工时间/分钟',fontsize=15)
plt.ylabel('各工位加工流程',fontsize=15)

# XY轴刻度
plt.yticks([1,2,3,4],['CJ1','CJ2','CJ3','CJ4'])

# 网格线
# plt.grid(linestyle='--',alpha=0.5)

plt.savefig('gatte.jpg')
plt.show()

结果展示:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/412290.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chapter-1数据管理技术的发展

以下课程来源于MOOC学习—原课程请见:数据库原理与应用 数据管理技术的发展 发展三阶段 人工管理【1950前】 采用批处理;主要用于科学计算;外部设备只有磁带,卡片,纸带等 特点:1.数据面向应用2.数据不保…

python注释方式

计算机语言的注释基本都是一样的作用 一个是 我这段代码可能之后还要用 但现在没用 我先注释在这里 他不会参与运行 但我想用了 直接打开注释 他就正常运行了 还要就是 用 注释 解释你代码的作用 方法呢 单行注释 以警号开头 右侧内容即为注释 print(666) print(130.33) #pr…

STM32之增量式编码器电机测速

STM32之增量式编码器电机测速编码器编码器种类按监测原理分类光电编码器霍尔编码器按输出信号分类增量式编码器绝对式编码器编码器参数分辨率精度最大响应频率信号输出形式编码器倍频STM32的编码器模式编码器模式编码器的计数方向仅在TI1计数电机正转,向上计数。电机…

卷麻了,00后测试用例写的比我还好,简直无地自容.....

前言 作为一个测试新人,刚开始接触测试,对于怎么写测试用例很头疼,无法接触需求,只能根据站在用户的角度去做测试,但是这样情况会导致不能全方位的测试APP,这种情况就需要一份测试用例了,但是不…

服务(第五篇)Nginx!!!

Nginx和Apache的差异? Nginx是一个基于事件的Web服务器,Apache是一个基于流程的Web服务器; Nginx所有请求都由一个线程处理,Apache单个线程处理单个请求; Nginx异步非阻塞的,Apache是阻塞的; Nginx在内存消耗和连接方面更好,Apa…

【JAVA】#详细介绍!!! synchronized 加锁 详解(2)

本篇主要是针对 synchronized锁的优化过程来介绍,针对synchronized的加锁优化过程来了解上篇所提到的synchronized的锁特性。 目录 1. synchronized锁的特性 2.synchronized 锁的升级过程 2.1 总过程: 2.2 偏向锁 2.3 轻量级锁 2.3.1自旋锁vs自适应…

网络安全之认识勒索病毒

一、什么是勒索病毒 勒索病毒,是一种新型电脑病毒,伴随数字货币兴起,主要以邮件、程序木马、网页挂马、服务器入侵、捆绑软件等多种形式进行传播,一旦感染将给用户带来无法估量的损失。如果遭受勒索病毒攻击,将会使绝…

Flink任务提交流程

抽象流程 抽象级别:不管是什么模式,大体上就是上面这个流程。 任务提交给分发器分发器把任务提交给JobManager上的JobMaster组件JobMaster收到任务之后,就会想JobManager上的ResourceManager去请求SlotJobManager上的ResourceManager会提供给…

3.1.2栈的顺序存储实现

(1)初始化一个顺序栈/栈的判空操作 与顺序表的声明类似 就是要加上一个栈顶指针top 然后把别名SqList改为SqStack 我们发现top指针的大小就是数组下标。 当空栈时,top指针为-1. (2)进栈操作 ep:插入一…

版本控制:git的基本使用

1.git基本介绍及安装 学习网址:Git - Book 安装步骤: Git - 安装 Git 安装完可以在本地电脑上查看: cmd为windows环境 bash为linux的环境 2. Git常用命令 牛客网项目——前置技术(五):版本控制_平什么阿的博客-C…

ffmpeg关于视频前几秒黑屏的问题解决

关于音频播放器视频前两秒黑屏的解决,及QtAV和ffmpeg的环境搭建(软件包可以找李青璠提供,也可以自己下)首先我们可以参考下面两个博客进行ffmpeg的搭建,第一个博客的问题可以在第二个博客里寻求方法解决。其中第一个博…

服务器上后台运行python程序

Linux中将代码nohup后台执行、查看正在运行代码、结束进程写在最前面环境代码示例nohup指令& 后台运行2>&1 错误内容重定向到标准输出查看当前python相关进程结束进程nohup后台pip下载安装写在最前面 一直是pycharm运行服务器上代码,但存在问题&#xf…

3.1、线程概述

3.1、线程概述1.线程概述2.线程和进程区别3.线程和进程虚拟地址空间4.线程之间共享和非共享资源①共享资源②非共享资源5.线程版本NPTL1.线程概述 与进程(process)类似,线程(thread)是允许应用程序并发执行多个任务的…

通达信指标没有了怎么找回

通达信指标没有了可以恢复,不用太慌张,通达信会自动备份指标公式,可以通过备份文件找回。 1、找到通达信安装文件夹,一般是new_tdx,但是版本不同,安装文件夹可能有区别。本文以new_tdx这个文件夹为例。 如…

什么是零代码与低代码?有什么区别与联系?未来趋势

目前传统软件开发模式并不能很好地满足企业的需求:高人力成本、长研发时间、运维复杂,需求变化快,技术更新快,人员流失。这时零代码或低代码工具出现在市面上并被关注就是必然趋势了。对于不太了解两者的人来说,零代码…

【mysql性能调优 • 三】字符集和校验规则

前言 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系…

Linux下Nginx配置SSL模块,Nginx安装SSL,Nginx支持https配置详细教程

前提:Linux安装Nginx,参考教程:CentOS7安装Nginx完整教程,Linux系统下保姆式安装Nginx教程 | 老麻 安装好Nginx之后,需要支持SSL时,要单独安装SSL模块,方法如下: 输入 ./nginx –V 命…

2345看图王阻止文件删除和U盘弹出 - 解决方案

2345看图王阻止文件删除和U盘弹出 - 解决方案前言2345看图王解决方案临时方案永久方案前言 用户在使用2345看图王查看图片后,可能会出现图片文件/文件夹无法删除或U盘无法弹出等问题,这是因为2345看图王的辅助模块正在占用图片文件,因此无法…

设计分布式日志系统

一、日志 1.1、什么是日志 日志是一种按照时间顺序存储记录的数据,它记录了什么时间发生了什么事情,提供精确的系统记录,根据日志信息可以定位到错误详情和根源。按照APM概念的定义,日志的特点是描述一些离散的(不连…

Spark----DataFrame和DataSet

Spark之DataFrame和DataSet 文章目录Spark之DataFrame和DataSetDataFrameDSL 语法创建DataFrame查看DataFrame的Schema信息只查看列数据的6种方式按照“age”分区,查看数据条数增加列withColumn修改列名withColumnRenamedRDD 转换为 DataFrameDataFrame 转换为 RDD转…