文章目录

基本语法导入库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()

结果展示:

好文推荐

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: