优秀的编程知识分享平台

网站首页 > 技术文章 正文

走进Matplotlib世界(三)(matplotlib gallery)

nanyue 2024-10-14 11:32:55 技术文章 17 ℃

回顾

在走进Matplotlib世界(二)中,我们介绍了Matplotlib修改图表的一些属性,包括图表属性、坐标属性、线条属性等。如之前所说,对于Matplotlib图表属性的学习将一直贯穿于我们日常的工作和学习中,今天我们继续讨论几个Matplotlib的图表属性。

legend:图例

图例是图表修饰中一个比较常见的属性。Matplotlib中使用legend来实现,其中可传参数包括handles,labels,loc等。handles是图线序列,labels是要显示的图例标签,loc是图例显示的位置,共有11种可选,传参时用String或Code均可。?

给之前的图简单添加一个图例,位置用best,自适应方式。?

# 0、导入包
import matplotlib.pyplot as plt
# 1、准备数据
x = [1, 2, 3, 4]
y = [10, 20, 30, 40]
# 2、创建图像
fig = plt.figure(figsize=(3, 3), dpi=100, facecolor=(0,1,0,1),
 edgecolor=(1,0,0,1), frameon=True, linewidth=1)
# 3、绘图
ax1 = fig.add_subplot(111)
ax1.plot(x, y)
# 4、自定义设置
ax1.set_xlabel('x') 
ax1.set_ylabel('y')
# 设置边界
ax1.set_xlim([1, 4])
ax1.set_ylim([10, 40])
# 设置图例
ax1.legend(['legend'], loc=0)
# 5、保存图形(按需要使用)
# plt.savefig(‘xxx.png’)
# 6、显示图形
plt.show()

效果如下图所示。当然,legend除了上述所提的参数外,还可以使用可选参数,在日后的学习工作中遇到了再记录。?

grid:给图表添加网格

在作图时我们常常会通过给图表添加网格以美化图表,使用grid方法来实现。grid方法的参数包括b, which, axis以及其他可选参数。b是否显示网格线,当提供color,linestyle等可选参数时,会默认b为True。which应用网格线,可传'major', 'minor', 'both'分别表示使用主刻度、次刻度、两者。axis应用轴,可传 'x', 'y', 'both'分别表示使用x轴、y轴、两者。可选参数包括color、linestyle、linewidth等。下面添加一个简单的网格线:?

# 0、导入包
import matplotlib.pyplot as plt
# 1、准备数据
x = [1, 2, 3, 4]
y = [10, 20, 30, 40]
# 2、创建图像
fig = plt.figure(figsize=(3, 3), dpi=100, facecolor=(0,1,0,1),
 edgecolor=(1,0,0,1), frameon=True, linewidth=1)
# 3、绘图
ax1 = fig.add_subplot(111)
ax1.plot(x, y)
# 4、自定义设置
ax1.set_xlabel('x') 
ax1.set_ylabel('y')
# 设置边界
ax1.set_xlim([1, 4])
ax1.set_ylim([10, 40])
# 设置图例
ax1.legend(['legend'], loc=0)
# 添加网格线(使用主次刻度需要先设置,这里暂时忽略,直接用both)
ax1.grid(True, which='both', axis='both', color='y', linestyle='--', linewidth=1)
# 5、保存图形(按需要使用)
# plt.savefig(‘xxx.png’)
# 6、显示图形
plt.show()

可看到效果如下:?

MultipleLocator, FormatStrFormatter:设置主/次刻度

首先大致解释一下主刻度和次刻度的概念,简单来说,主刻度和次刻度就类似于一把直尺上厘米(cm)和毫米(mm)的关系一样,大单位就相当于主刻度,小单位相当于次刻度。Matplotlib中使用MultipleLocator生成刻度标签,FormatStrFormatter生成刻度标签格式,然后分别用set_major_locator、set_major_formatter、set_minor_locator、set_minor_formatter进行主/次刻度的设置。下面通过对x轴的修改来看一下主/次刻度的设置效果?,需要注意的是,使用MultipleLocator和FormatStrFormatter需要导入Matplotlib的ticker包。

# 0、导入包
import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator, FormatStrFormatter
# 1、准备数据
x = [1, 2, 3, 4]
y = [10, 20, 30, 40]
# 2、创建图像
fig = plt.figure(figsize=(3, 3), dpi=100, facecolor=(0,1,0,1),
 edgecolor=(1,0,0,1), frameon=True, linewidth=1)
# 3、绘图
ax1 = fig.add_subplot(111)
ax1.plot(x, y)
# 4、自定义设置
ax1.set_xlabel('x') 
ax1.set_ylabel('y')
# 设置边界
ax1.set_xlim([1, 4])
ax1.set_ylim([10, 40])
# 设置图例
ax1.legend(['legend'], loc=0)
# 设置主刻度 次刻度
x_major_locator = MultipleLocator(1) #将x轴主刻度标签设置为1的倍数
ax1.xaxis.set_major_locator(x_major_locator)
x_major_formatter = FormatStrFormatter('%.0f') #设置x轴标签文本的格式
ax1.xaxis.set_major_formatter(x_major_formatter)
x_minor_locator = MultipleLocator(0.5) #将x轴次刻度标签设置为0.5的倍数ax.xaxis.set_minor_locator(xminorLocator)
ax1.xaxis.set_minor_locator(x_minor_locator)
# 添加网格线
ax1.grid(True, which='both', axis='both', color='y', linestyle='--', linewidth=1)
# 5、保存图形(按需要使用)
# plt.savefig(‘xxx.png’)
# 6、显示图形
plt.show()

结果如下。可以看到x轴上1.5、2.5、3.5的位置上已经出现了次刻度。?

text:在坐标系上添加文本

?? 当我们要在图表上的指定位置添加文本时,可以使用text方法。text方法的参数包括x,y,s,fontdict,withdash等。x,y是放置文本的位置。s是要添加的文本。fontdict用于覆盖默认文本属性的字典,例如fontsize等,如果fontdict为none,则默认值由rc参数(matplotlib.rcParams,rcParams是pylot使用rc配置文件来自定义图形各种默认属性的方法,也叫rc配置或rc参数,通过rc参数可以修改图表的默认属性,包括窗体大小、每英寸的点数、线条宽度、颜色、样式、坐标轴、坐标和网络属性、文本、字体等)决定。withdash创建一个TextWithDash实例用于代替Text实例。下面我们在(2, 20)这个位置添加一个文本。?

# 0、导入包
import matplotlib.pyplot as plt
# 1、准备数据
x = [1, 2, 3, 4]
y = [10, 20, 30, 40]
# 2、创建图像
fig = plt.figure(figsize=(3, 3), dpi=100, facecolor=(0,1,0,1),
 edgecolor=(1,0,0,1), frameon=True, linewidth=1)
# 3、绘图
ax1 = fig.add_subplot(111)
ax1.plot(x, y)
# 4、自定义设置
ax1.set_xlabel('x') 
ax1.set_ylabel('y')
# 设置边界
ax1.set_xlim([1, 4])
ax1.set_ylim([10, 40])
# 设置图例
ax1.legend(['legend'], loc=0)
# 添加网格线
ax1.grid(True, which='both', axis='both', color='y', linestyle='--', linewidth=1)
# 添加注释
plt.text(2, 20, 'text', fontsize=10)
# 5、保存图形(按需要使用)
# plt.savefig(‘xxx.png’)
# 6、显示图形
plt.show()

运行效果如下:?

最后再简单介绍几个比较常用的属性方法,matplotlib.rcParams['xtick_direction'] 、matplotlib.rcParams['ytick.direction']可以设置刻度的方向。plt.axis('off')可以关闭坐标轴,如果想只关闭x轴或y轴,可以使用frame = plt.gca()获取当前子图,然后用frame.axes.get_xaxis().set_visible(False)或frame.axes.get_yaxis().set_visible(False)对x轴或y轴设置是否显示。

我们在学习Matplotlib作图时,可以通过查阅官方文档尽可能多地去尝试图表的各种属性设置,不断练习才能更好的掌握,最后作出漂亮的图也是很有成就感的。毕竟一张图表胜过千言万语呀~

Tags:

最近发表
标签列表