Python数据分析: matplotlib模块学习之绘制折线图

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岁等

完成之后的折线图

Python数据分析: matplotlib模块学习之绘制折线图_第1张图片

思路

根据题目中所知, 我们需要绘制两条折线图,分别是自己和同桌,在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()

在终端中运行查看结果

Python数据分析: matplotlib模块学习之绘制折线图_第2张图片

总结:我们都做了一些什么

  • 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.为不同的图形添加图例
    以上统统很重要

你可能感兴趣的:(数据分析,python)