0
点赞
收藏
分享

微信扫一扫

matplotlib——折线图(python)

前言

在学习数据分析前,一定要有python基础,不一定要非常熟练的掌握这门语言,但一定要对python有个大概的了解(就像我一样,大一学过python,但是现在忘的差不多了,但是没关系,有个大致了解即可,遇到不会的再去Google就行😂)。

什么是matplotlib

matplotlib是最流行的python底层绘图库,主要做数据可视化图表,名字取自matlab,模仿matlib构建

我们为什么要学matplotlib

  1. 能将数据进行可视化,更直观的呈现。
  2. 使数据更加客观,更具说服力

正文

第一版

代码
from matplotlib import pyplot as plt

x=range(2,26,2)
y=[15,16,18,19,21,21,24,27,25,23,22,18]

plt.plot(x,y)
plt.show()
效果

在这里插入图片描述

这是最简略的版本,我们只是简单的把折线图画出来了,但是先不说别人能不能看明白,我们自己就看不明白。所以我们要改进。
要改进的问题:

  1. 设置图片大小
  2. 保存到本地
  3. 描述信息,比如x轴,y轴表示什么,这个图表示什么
  4. 调整x轴,y轴刻度的间距
  5. 线条的样式(比如颜色,透明度)
  6. 给图片加水印(防止图片被盗用)

第二版

代码
# 导入库
from matplotlib import pyplot as plt

# 解决中文乱码
import matplotlib
matplotlib.rc("font",family='FangSong')

# 初始化数据
# 数据在x轴的位置,是一个可迭代的对象,在y轴也是如此
# x轴和y轴的数据一起组成了所有要绘制出的坐标,分别是(2,15),(4,16).....(24.18)
x=range(2,26,2)		
y=[15,16,18,19,21,21,24,27,25,23,22,18]


# 设置图片大小属性
# figsize设置画布的大小,第一个元素是长,第二个元素是宽
# dpi表示清晰度(我也不是很清楚,大概这么理解),越大图片越清晰
fig=plt.figure(figsize=(20,8),dpi=160)

# 添加描述信息,x/y轴表示什么,这个图形表示什么
# xlabel和ylabel都是设置横纵坐标的信息
# title是设置整张图片的信息,表示这张图片表示什么
plt.xlabel("时间")
plt.ylabel("温度(摄氏度)")
plt.title("一天中气温随时间变化曲线")

# 调整x/y轴的刻度间距
# 先准备一个列表,这个列表中的数据是x轴的刻度,然后将x轴刻度设置成列表中的数据。y轴也是如此。
x_ticks=range(2,25)
y_ticks=range(min(y),max(y)+1)
plt.xticks(x_ticks)
plt.yticks(y_ticks)

# 添加水印
plt.text(x=1,               # 水印开头左下角对应的X点
            y=35,               # 水印开头左下角对应的Y点
            s="Matplotlib",    # 水印文本
            fontsize=30,       # 水印大小
            color="gray",      # 水印颜色
            alpha=0.5)         # 水印是通过透明度控制的

# 绘制图形
plt.plot(x,y)

# 保存到本地
plt.savefig("./image/pic1.svg")

# 展示图形
plt.show()
效果

在这里插入图片描述

进阶练习

需求:我们绘制一个折线图,表示我和同桌随年龄增长交往的朋友的数量,注意这里是要一个图里画两条线。

代码
# 一个小demo演示

from matplotlib import pyplot as plt

# 解决中文乱码
import matplotlib
matplotlib.rc("font",family='FangSong')

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)

fig=plt.figure(figsize=(20,8),dpi=160)

plt.xlabel("年龄")
plt.ylabel("交往的朋友数量(个)")
plt.title("随年龄增长交往的朋友数量")

x_ticks=["{}岁".format(i) for i in x]
plt.xticks(x,x_ticks)
plt.yticks(range(min(y),max(y)+3))

# 加上网格
plt.grid(alpha=.4,linestyle="-.")

# 设置线条样式
plt.plot(x,y_1,label="自己",color="r",linestyle=":")
plt.plot(x,y_2,label="同桌",color="b",linestyle="--")

plt.legend()
plt.show()

# plt.savefig("./image/pic2.svg")
注意

● 这里设置的x轴刻度带有中文,一般按照上面的格式来设置(应该还有其他方法,但是我才学疏浅,还没有掌握)。x_ticks是中文和数字组合的刻度的列表,最后用plt.plot()设置时要传两个参数,第一个参数是纯数字(一定要和x_ticks中的填充的数字一样),第二个参数就是x_ticks。
● 设置线条样式

颜色字符风格字符
r红色-实线
g绿色--虚线
b蓝色-.点划线
w白色:点虚线
c青色' '留空或空格,无线条
m洋红
y黄色
k黑色
#00ff0016进制,自定义颜色
效果

在这里插入图片描述

代码
# 第二个小demo,演示十点到十二点的的气温变化

from matplotlib import pyplot as plt

# 解决中文乱码
import matplotlib
matplotlib.rc("font",family='FangSong')

x=range(0,120)
y=[random.randint(20,35) for i in range(120)]

fig=plt.figure(figsize=(20,8),dpi=200)

plt.xlabel("time")
plt.ylabel("气温")

x_ticks=["10点{}分".format(i) for i in range(60)]
x_ticks+=["11点{}分".format(i) for i in range(60)]
plt.xticks(list(x)[::3],x_ticks[::3],rotation=45)
plt.yticks(range(20,36))
           
plt.grid(alpha=.4)

plt.text(x=1,               # 水印开头左下角对应的X点
            y=35,               # 水印开头左下角对应的Y点
            s="Matplotlib",    # 水印文本
            fontsize=30,       # 水印大小
            color="gray",      # 水印颜色
            alpha=0.5)         # 水印是通过透明度控制的


plt.plot(x,y)
plt.show()

# plt.savefig("./image/pic3.svg")
效果

在这里插入图片描述

说明

在设置x轴刻度时,我们会遇到两个问题。
● 如果太密集的话,我们进行切片操作。
● 如果太密集的话,我们对刻度进行旋转,rotation就是设置旋转的参数,传的参数就是旋转的度数(0度是横着,即与x轴平行)

总结

  1. 绘制折线图(plt.plot)
  2. 设置图片的大小和分辨率(plt.figure)
  3. 实现图片的保存(plt.savefig)
  4. 设置x/y轴上的刻度和字符串(plt.xticks和plt.yticks)
  5. 解决刻度稀疏和密集的问题(切片和旋转)
  6. 设置标题,xy轴的label(plt.titleplt.xlabelplt.ylabel)。特别的,如果有多条线的话,要在绘制时(plt.plot)设置每条线的标签,并且最后还要plt.legend。
  7. 设置字体,解决中文乱码的问题
举报

相关推荐

0 条评论