2021-02-15 matplotlib(绘制折线图)

这篇博客详细介绍了matplotlib在Python中的使用,包括导入、图形大小设置、绘图、刻度调整、图例、图形样式等基本要点,并提供了实操案例和常见错误记录。
摘要由CSDN通过智能技术生成

基本要点

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()包头不包尾

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值