一、matplotlib简介
1、matplotlib的用处
1)将数据进行可视化,更直观的呈现出来。
2)使数据更加客观,更具说服力
2、什么是matplotlib
最流行的Python底层绘图库,主要做数据可视化图表,名字取材于MATLAB,模仿MATLAB构建
3、matplotlib基本要点
axis轴(指的是x,y这类的坐标轴)
坐标(代表每个点的位置)
*注意:x数据要与y数据一一对应
二、 简要绘制一个折线图
1、导入pyplot
from matplotlib import pyplot as plt
*注意:将其用plt表示,以后就用plt
2、导入x,y轴的数据(都是可迭代对象)
例如:
x = range(1,5)
y = [2,4,3,5]
##表示点(1,2),(2,3)...
3、传入x,y通过plot绘制出折线图
plt.plot(x,y)
4、展示
plt.show()
效果展示:
三、设置图片绘制出的图片的大小与保存
plt.figure(figsize=(10,5),dpi=80)
其中figsize中第一个数表示图片长度,第二个参数表示图片宽度
当图像模糊时可以传入dpi参数,使图片更加清晰
保存:
plt.savefig("./hhh_size.png")
*注意:保存要在图片绘制完之后,即plt.plot(x,y)之后
四、调整x或y轴的刻度
##使每个x的值都在图中得以显示
##若要使刻度更密,则用range
##若要使刻度变的更加精密,譬如精确到0.1,不可用range()来写,因为range不能接受float,需要建立一个列表,并将该列表导入x的刻度中
1、设置刻度:
plt.xticks(x)
plt.yticks(y)
2、使刻度精密:
new_x_ticks = [i for i in x ] #先放入一个列表中
plt.xticks(x[::5],new_x_ticks[::5],rotation=270)#使用列表切片,每隔五个取一个数据进行展示,并将精度设置为5,rotation表示旋转x轴刻度,防止字重叠,这里指向左旋转270度
五、添加描述信息
设置坐标轴的label,包括自变量名(因变量名),单位
plt.xlabel("时间(/h)") #设置x轴
plt.title("我爱死算法”) #设置标题
六、中文不显示问题
解决办法1:
plt.rcParams['font.sans-serif'] = ['SimHei',]
直接输入以上代码
解决办法2:
导入font_manager
from matplotlib import font_manager #导入font_manager
new_font = font_manager.FontProperties(fname="/ ") #指定具体文字文件路径
plt.title("我爱死算法",fontproperties=new_font) #每次使用中文时,需要添加fontproperties参数
七、多条折线的绘制与调整
绘制:只需多次plot即可
调整:
1、绘制网格
plt.grid(alpha=0.5) #alpha为设置网格透明度,当alpha=1时,格线最深
2、图例
第一步设置label=" "
第二步添加图例
plt.plot(x,y1,label="不爱早八")
plt.plot(x,y2,label="爱死早八")
plt.legend(prop=new_font) #添加图例,特别注意,若这里要使用中文则要用prop=,不能用fontproperties=
第三步调整图例使其在喜欢的地方
plt.legend(prop=new_font,loc="best") #表示设置图例位置在电脑觉得ok的地方
其他地方:
3、改变图线颜色与线条
plt.plot(x,y1,Label="不爱早八",color="orange",linestyle=":") #:即短连续虚线
八、绘制图表完整代码展示
from matplotlib import pyplot as plt
from matplotlib import font_manager
new_font = font_manager.FontProperties(fname="/System/Library/Fonts/PingFang.ttc")
y_1 = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
y_2 = [1,0,3,1,2,2,3,3,2,1 ,2,1,1,1,1,1,1,1,1,1]
x = range(11,31)
plt.figure(figsize=(10,5),dpi=80)
plt.plot(x,y_1,label="爱死早八",color="#F08080")
plt.plot(x,y_2,label="不爱早八",color="#DB7093",linestyle="--")
_xtick_labels = [f"{i}人" for i in x]
plt.xticks(x,_xtick_labels,fontproperties=new_font)
plt.yticks(range(0,9))
plt.grid(alpha=0.8,linestyle=':')
plt.legend(prop=new_font,loc="upper right")
plt.show()