科学数据库Python——matplotlib画折线图

本文详细介绍了matplotlib库在Python中绘制折线图的基础操作,包括设置图片大小、保存到本地、调整轴刻度间距、解决中文乱码问题、添加标题、轴描述、图例、线条样式、颜色和宽度,以及添加水印。通过实例展示了如何创建高清图像、自定义刻度、设置中文字体,以及绘制多条折线图并添加个性化图例。同时,还演示了如何给图片添加中文水印以防止盗用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

matplotlib基础绘图

from matplotlib import pyplot as plt 
# 导入画图工具包
x = range(2,26,2)
y = [15,13,14.5,17,20,25,26,26,24,22,18,15]
# x,y分别表示数据在x轴和y轴所在的位置,是一个可迭代的对象
plt.plot(x,y) # 传入x和y,通过plot绘制出折线图
plt.show() # 在执行程序时展示图形

Fig 1

设置图片大小

我们想要一个高清无码的大图

fig = plt.figure(figsize = (20,8),dpi = 80)
# fugure表示图形的图标,就是指我们的图
# 通过实例化一个figure并且传递参数,让后台可以自动使用该figure的实例
# 在图像模糊的时候可以传入dpi参数
# dpi---dots per inch 释义为每英寸上点的个数,让图片更加清晰

保存到本地

x = range(2,26,2)
y = [15,13,14.5,17,20,25,26,26,24,22,18,15]
plt.plot(x,y)
plt.save("./sig_size.png") #保存图片
plt.show()

调整x或者y轴刻度的间距

# plt.xticks(x) #设置x轴的刻度
plt.xticks(range(2,25))
plt.yticks(range(min(y),max(y)+1))

输出结果为:
在这里插入图片描述
plt.xticks和plt.yticks用来显示x,y坐标轴的刻度值。
具体刻度值的取值可以通过一个列表来表示
我们更改下刻度值如下:
[2.0, 2.5, 3.0, 3.5, 4.0, 4.5, …, 24.0]


fig = plt.figure(figsize=(20,8),dpi = 80)
# 设置图像的大小格式
plt.plot(x,y) 
plt.xticks(range(2,25))
plt.yticks(range(min(y),max(y)+1))
# plt.show() # 在执行程序的时候展示图形
# plt.xticks和plt.yticks用来显示x,y坐标轴的刻度值。
# 具体刻度值的取值可以通过一个列表来表示
plt.xticks([i/2 for i in range(4,49)]) 
# 表示x的刻度值为[2.0,2.5,3.0,3.5,4.0,4.5,...,24.0]
plt.show() # 在执行程序的时候展示图形

输出结果如下:
在这里插入图片描述
总结:通过往plt.xticks( )或者plt.yticks( )的括号中传入一个列表参数来刻画x轴或者y轴的刻度值。

当刻度太密集时候,使用列表的步长(间隔)来解决,matplotlib会自动帮我们对应,如:

x = range(2,26,2)
y = [15,13,14.5,17,20,25,26,26,24,22,18,15]
fig = plt.figure(figsize=(20,8),dpi = 80)
# 设置图像的大小格式
plt.plot(x,y) 
plt.yticks(range(min(y),max(y)+1))
plt.xticks(([i/2 for i in range(5,49)])[2::2]) 
plt.show() # 在执行程序的时候展示图形

结果如下:
在这里插入图片描述
可以观察上面两幅图中,x轴刻度的起始位置和步长的变化。

解决matplotlib的中文乱码问题

问题:如果列表a表示10点到12点每一分钟的温度,那么如何绘制折线图描绘每一分钟的温度变化情况?
在这里插入图片描述
按照题目提示,我们要设定x轴坐标的刻度有两个,分别为:
10点__分 和 11点__分
即需要写伪代码:

plt.xticks([101,102,...,1158,1159])

接下来就是设定plt.xticks()这个括号中的列表,即设置x轴的刻度:[10点1分,10点2分,…,11点58分,11点59分]。

于是,可以通过遍历和列表的相加操作来实现。

_xtick_labels = ["10点{}分".format(i) for i in range(60)]
_xtick_labels += ["11点{}分".format(i) for i in range(60)]

通过以上操作,我们将时间分成两段:10点__分和11点__分两种类型,并且表示为列表格式,那么接下来我们试着传递列表参数到plt.xticks(_xtick_labels)中。

此时,会报错。
matplotlib不能直接识别中文字符,这个时候就需要
正确做法如下:

from matplotlib import font_manager
from matplotlib import pyplot as plt
import random
my_font = font_manager.FontProperties(fname="/System/Library/Fonts/PingFang.ttc")
# 插入计算机中现有的中文字体

我们插入之后:

x = range(120)
y=[random.randint(20,35) for i in range(120)]
fig = plt.figure(figsize=(20,8),dpi = 80)
plt.plot(x,y)
_xtick_labels = ["10点{}分".format(i) for i in range(60)]
_xtick_labels += ["11点{}分".format(i) for i in range(60)]
# 双步长,数字和字符串一一对应,数据的长度一样。
# 双步长,数字和字符串一一对应,数据的长度一样。
plt.xticks(list(x)[::5],_xtick_labels[::5],rotation=45,fontproperties=my_font)
plt.show()

输出结果如下:
在这里插入图片描述
rotation=45 表示旋转45度角,这个可以自由更改。

标题、x轴和y轴的描述信息

plt.xlabel('时间',fontproperties = my_font,size=30)
plt.ylabel('温度(℃)',fontproperties = my_font,size=30)
plt.title("10点到12点每分钟的时间变化情况",fontproperties = my_font,size = 30)

输出结果如下:
在这里插入图片描述
中文字体在matplotlib中的显示得到完美解决。

线条的样式

实例练习
11岁到30岁的交友数量为列表a,请绘制该数据的折线图,分析自己每年交友数量的走势;
y轴表示个数,x轴表示岁数。

a = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
b = [1,0,1,2,3,4,1,3,1,1,1,1,1,1,1,1,1,1,1,1]
x = range(11,31)
y_1 = a
y_2 = b
fig = plt.figure(figsize=(20,8),dpi = 80)
plt.plot(x,y_1,label = "自己",color = "#ff3399",linestyle = ':',linewidth = '5')
plt.plot(x,y_2,label = "朋友",color = "Cyan",linestyle = '--',linewidth = '5')
# 百度颜色代码,如:#f3399就是设定的颜色
_xtick_labels = ["{}岁".format(i) for i in x]

plt.xticks(list(x),_xtick_labels,rotation=45,fontproperties = my_font,size = 30) # rotation旋转的角度
plt.yticks(range(0,8))
plt.xlabel('年龄',fontproperties = my_font,size=30)
plt.ylabel('交友个数',fontproperties = my_font,size=30)
plt.title("11岁到30岁每年的交友数量变化情况",fontproperties = my_font,size = 30)
# 绘制网格
plt.grid(alpha=0.25)  #alpha 透明度,当alpha=1表示完全不透明
# 添加图例
plt.legend(prop=my_font,loc="upper right",fontsize=20)
plt.show() 

为每条线添加图例

plt.legend(prop=my_font,loc="upper right",fontsize=20)
plt.show() 

在这里插入图片描述

设定颜色和线条宽度等

plt.plot(x,y_1,label = "自己",color = "#ff3399",linestyle = ':',linewidth = '5')
plt.plot(x,y_2,label = "朋友",color = "Cyan",linestyle = '--',linewidth = '5')

其中,#ff3399是RGB三原色对应的代码表。
其余颜色可以参照:RGB代码表

给图片添加一个水印(防伪,防止盗用)

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

plt.show() 

输出结果如下:
在这里插入图片描述
当然,这是添加英文的水印 “Hello world”

那么,如何添加中文水印呢?

plt.text(x=20,               # 水印开头左下角对应的X点
          y=5,               # 水印开头左下角对应的Y点
         s="加个中文水印",    # 水印文本
        fontsize=50,       # 水印大小
          color="#ff0099",      # 水印颜色
        alpha=0.5,        # 水印是通过透明度控制的
            fontproperties = my_font
        )         

plt.show() 

输出结果如下:
在这里插入图片描述
无非是加上这么一句话: fontproperties = my_font 读取一下中文字体的格式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值