基本要点
matplotlib是Python底层绘图库,主要做数据可视化图表,使数据更客观,更具说服力
导入
from matplotlib import pyplot as plt
设置图形大小
plt.figure(figsize=(20,8),dpi=80)
绘图
-
图中绘制单个图形
plt.plot(x,y)
-
图中绘制多个图形
plt.plot(x,y)
多次调用,plt.plot(x,y_1),plt.plot(x,y_2)
调整刻度
plt.xticks()/plt.yticks()
-
调整间距,传一个参数(包含数字的可迭代对象),选取所需间距
plt.xticks(x[::2])
-
添加字符串到x,y轴,传入2个参数,分别是2个可迭代对象,数字和字符串会一一对应,且只显示字符串
_x =list(x) #强转为列表,方便取步长
_x_ticks_label = ['10点{}分'.format(i) for i in range(60)]
plt.xticks(_x[::5],_x_ticks_label[::5])
展示
plt.show()
保存
plt.savefig('file_path.png/svg')
显示中文
font_manager
- 导入
from matplotlib import font_manager
- 实例化一个字体对象
my_font = font_manager.FontProperties(fname='system/library/fonts/PingFang.ttc')
- 使用(传参)
- 在需要显示中文的地方添加
fontproperties=my_font
- 图例
plt.legend()
中使用prop=my_font
- 在需要显示中文的地方添加
图例
- 展示图中多条线代表谁
对象1.plot(label = '唯一标识')
对象2.legend(loc='图例位置上下左右中 center')
图形(网格)的样式
plt.plot() – 线条,图形
plt.grid() – 网格
- 颜色
对象1.plot(color='w/orange/#DB7093')
- 线条样式
对象1.plot(linestyle='--')
- 线条宽度
对象1.plot(linewidth=5)
- 透明度(从0-1)
plt.grid(alpha=0.4)
其他自定义图形格式可百度
添加图形描述
- x轴
plt.xticks()
- y轴
plt.yticks()
- 标题
plt.title()
实操
'''
a = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
b = [1,0,3,1,2,2,3,3,2,1 ,2,1,1,1,1,1,1,1,1,1]
要求:
y轴表示个数
x轴表示岁数,比如11岁,12岁等
'''
from matplotlib import pyplot as plt
from matplotlib import font_manager
my_font = font_manager.FontProperties(fname='/system/library/fonts/PingFang.ttc')
#设置图片大小
plt.figure(figsize=(20,8),dpi=80)
x = range(11,31)
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]
#绘图
plt.plot(x,y_1,label='1号',color='orange',linestyle='--',linewidth=5)
plt.plot(x,y_2,label='2号',color='#DB7093',linestyle=':',linewidth=5)
#要在绘图之后才能保存图片,否则保存的是空白图
#plt.savefig('./sig_size.png')
#plt.savefig('./svg_size.svg') #svg矢量图
#调整x,y轴
_x_ticks = ['{}岁'.format(i) for i in x]
plt.xticks(x,_x_ticks,fontproperties=my_font)
plt.yticks(range(0,9))
#添加图片描述
plt.xlabel('年龄',fontproperties=my_font)
plt.ylabel('恋爱个数',fontproperties=my_font)
plt.title('年龄与恋爱次数的比例',fontproperties=my_font)
#网格
plt.grid(alpha=0.5) #调整透明度 grid(alpha,从0-1)
#添加图例
# tips:只有在此处可用prop,其他地方接收中文字体需要用fontproperties
# loc表示图例的位置 cmd+b查看源码可得指定图例位置的数字代码
plt.legend(prop=my_font,loc='center')
#展示
plt.show()
错误记录
1.ValueError: x and y must have same first dimension, but have shapes (1, 120) and (120,)
错误原因及改正:因为plt.plot(x,y)
中应传入range类型而不是list类型,所以应将 x = [range(0,120)]
修改为 x = range(0,120)
2.ValueError: x and y must have same first dimension, but have shapes (19,) and (20,)
错误原因及改正:x轴与y轴刻度不一致,同时需要注意range()包头不包尾