matplotlib模块绘制折线图的基本使用
题目
假设大家在30岁的时候,根据自己的实际情况,统计出来了**你和同桌**各自从11岁到30岁
每年交的女(男)朋友的数量如列表a,请在一个图中绘制该数据的**折线图**, 以便比较自己
和同桌20年间的差异, 同时分析自己每年交女(男)朋友的数量走势
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岁等
完成之后的折线图
思路
根据题目中所知, 我们需要绘制两条折线图,分别是自己和同桌,在x轴上需要添加汉字, 年龄为11到30岁, 每年所交往朋友的个数题目已给出
步骤
- 首先我们先导入所需要使用到的包
from matplotlib import pyplot as plt
from matplotlib import font_manager
- 设置图片大小和分辨率
plt.figure(figsize=(20, 8), dpi=80)
- 设置x轴和y轴的数据, 其中x轴为年龄
y_self = [1, 0, 1, 1, 2, 4, 3, 2, 3, 4, 4, 5, 6, 5, 4, 3, 3, 1, 1, 1]
y_he = [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.plot(x, y_self) # 自己
plt.plot(x, y_he) # 同桌
- 在调用plt.show()方法进行查看,运行代码, 发现x轴中没有带上字符串,注意:在matplotlib中默认是不能输出汉字的,所以,我们需要使用特殊的方法将汉字打印出来
my_font = font_manager.FontProperties(fname=r'C:\Windows\Fonts\simfang.ttf')
- 先定义一个my_font, 注意参数"fname"中传入的是字体的绝对路径
要想要让汉字输出出来,只需要在后续中plt.xticks()函数中的传入一个fontproperties=my_font就可以了, 还能传入rotation将字符翻转
xticks = ["{}岁".format(i) for i in x]
plt.xticks(x, xticks, rotation=45, fontproperties=my_font) # x坐标轴
- 添加图例
- 首先在plt.plot中传入label参数, 然后再下方使用plt.legend()来绘制图例即可,其中alpha参数代表为清晰度, prop为显示汉字, loc表示图例在图像的哪个位置
plt.plot(x, y_self, label="自己") # 自己
plt.plot(x, y_he, label="同桌", alpha=0.5) # 同桌
# 绘制图例
plt.legend(prop=my_font, loc="upper left") # 接收显示汉字
- 绘制网格,绘制表格比较容易, 调用plt.grid()方法即可, linestyle表示输出线条的样式,在plt.plot方法中也可以使用这个参数
# 绘制网格
plt.grid(alpha=0.3, linestyle="--")
- 保存
- 调用plt.savefig(“file_path”)即可保存
plt.savefig("05_折线图.png") # 保存在当前目录中
完整代码
from matplotlib import pyplot as plt
from matplotlib import font_manager
"""
题目:
假设大家在30岁的时候,根据自己的实际情况,统计出来了你和同桌各自从11岁到30岁
每年交的女(男)朋友的数量如列表a,请在一个图中绘制该数据的折线图, 以便比较自己
和同桌20年间的差异, 同时分析自己每年交女(男)朋友的数量走势
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岁等
"""
# 设置汉字
my_font = font_manager.FontProperties(fname=r'C:\Windows\Fonts\simfang.ttf')
# 设置图片大小
plt.figure(figsize=(20, 8), dpi=80)
y_self = [1, 0, 1, 1, 2, 4, 3, 2, 3, 4, 4, 5, 6, 5, 4, 3, 3, 1, 1, 1]
y_he = [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.plot(x, y_self, label="自己") # 自己
plt.plot(x, y_he, label="同桌", alpha=0.5) # 同桌
xticks = ["{}岁".format(i) for i in x]
plt.xticks(x, xticks, rotation=45, fontproperties=my_font) # x坐标轴
# 描述内容信息
plt.xlabel("11到30岁的年龄", fontproperties=my_font) # x轴
plt.ylabel("交往的男(女)朋友个数", fontproperties=my_font) # y轴
plt.title("自己和同桌20年之中交朋友的折线图", fontproperties=my_font) # 折线图标题
# 绘制网格
plt.grid(alpha=0.3, linestyle="--")
# 绘制图例
plt.legend(prop=my_font, loc="upper left") # 接收显示汉字
plt.savefig("05_折线图.png") # 保存在当前目录中
plt.show()
在终端中运行查看结果
总结:我们都做了一些什么
- 1.绘制了折线图(plt.plot)
- 2.设置了图片的大小和分辨率(plt.figure)
- 3.实现了图片的保存(plt.savefig)
- 4.设置了xy轴上的刻度和字符串(xticks)
- 5.解决了刻度稀疏和密集的问题(xticks)
- 6.设置了标题,xy轴的label(label(title, xtabel, ylabel))
- 7.设置了字体(font_manager.FontProperties)
- 8.在一个图上i绘制多个图形(plt多次plot即可)
- 9.为不同的图形添加图例
以上统统很重要