国外课栈 - 国外电子信息技术视角栈

透视Matplotlib核心功能和工具包 - axes_grid1工具包

 二维码 16

关联知识

axes_grid1工具包旨在提供一组帮助器类,以在网格中绘制带有颜色条的图像,并且颜色条与图像大小正确对齐。 它可用于放大图像的一部分,绘制插入轴(类似于图片中的图片),绘制二维图和两个变量,寄生轴和锚定艺术家中每个变量的关联直方图。

使用axisartst和axesgrid1工具箱绘制双轴

在此,我们将学习如何使用Matplotlib twinx主方法以及axisartist和axes_grid1工具包在多个y轴上绘制多个比例尺。

导入所需库:

import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator

步骤细节:

  • 如下定义图形和主轴(ax1,左侧的y轴):

fig, ax1 = plt.subplots(1,1)

  • 定义双轴(ax2,右侧的y轴,ax3,右侧的另一个y轴):

ax2 = ax1.twinx()
ax3 = ax1.twinx()

  • 放置ax3,使其与右轴ax2不重叠:

ax3.spines['right'].set_position(('axes', 1.15))

  • 准备数据并在主轴ax1上绘制产品缺陷条形图:

x = [0, 1, 2, 3, 4, 5]
y = [19, 12, 6, 4, 3, 2]
b = ax1.bar(x, y, label='Number of Defects')

  • 在右轴ax2的折线图上,准备数据并按百分比绘制累积缺陷。

y = [41, 67, 80, 89, 96, 100]
l, = ax2.plot(x, y,
color='g', lw=5, label='Cumulative Defects as %')

  • 准备数据并在第二个右轴ax3上绘制累积的缺陷计数折线图:

y = [19, 31, 37, 41, 44, 46]
l1, = ax3.plot(x, y,
color='m', lw=5, label='Cumulative Defects
               Count'
)

  • 定义步长为2的主轴定位器,并将其应用于主轴的y轴ax1:

majorLocator = MultipleLocator(2)
ax1
.yaxis.set_major_locator(majorLocator)

  • 使用以下代码设置x和y标签以及所有轴的限制:

ax1.set(xlabel='Defect Reason Codes', ylabel='Number of Defects')
ax2.
set(ylabel='Cumulative Defects as %')
ax3.
set_ylim(15,50)
ax3.
set_ylabel('Cumulative Defects Count', labelpad=10)

  • 如下设置主轴的图例和标题:

graphs = [b, l, l1]
ax1.legend(graphs, [g.get_label()
for g in graphs], loc=5)
ax1.set_title(
'Product Defects - August 2018')

  • 设置标签的颜色:

ax1.yaxis.label.set_color(b.patches[0].get_facecolor())
ax2
.yaxis.label.set_color(l.get_color())
ax3
.yaxis.label.set_color(l1.get_color())

  • 设置两个右轴的颜色,如下所示:

ax2.spines['right'].set_edgecolor(l.get_color())
ax3.spines['right'].set_edgecolor(l1.get_color())

  • 设置刻度和刻度标签的颜色,如下所示:

ax1.tick_params(axis='y', colors=b.patches[0].get_facecolor())
ax2.tick_params(
axis='y', colors=l.get_color())
ax3.tick_params(
axis='y', colors=l1.get_color())

  • 使用以下命令在屏幕上显示图形:

plt.show()

分解代码

  • ax2 = ax1.twinx()和ax3 = ax1.twinx()创建称为ax2和ax3的逻辑轴,它们共享主轴的x轴(ax1),但右侧具有不同的y轴。
  • ax3.spines ['right'].set_position(('axes',1.15))将第二个y轴向右移动主轴宽度的15%。 如果我们不这样做,则ax2和ax3 y轴将相互重叠,并在同一轴上同时显示它们的刻度和刻度标签。
  • x = [0,1,2,3,4,5]是产品缺陷代码列表,y = [19,12,6,4,3,2]是缺陷原因代码列表。
  • b = ax1.bar(x, y, label='Number of Defects')绘制产品缺陷数的条形图。
  • y1 = [41, 67, 80, 89, 96, 100] 是累积缺陷占总数百分比的列表。
  • l1, = ax3.plot(x, y2, color='m', lw=5, label='Cumulative Defects Count')将其绘制为折线图。
  • majorLocator = MultipleLocator(2)定义步长为2的定位器,ax1.yaxis.set_major_locator(majorLocator)将定位器应用到主轴a1的y轴上。
  • ax3.set_ylabel('Cumulative Defects Count', labelpad=10)设置最右边的轴的y轴标签,而labelpad = 10指定轴与其标签之间的间隙,以便标签不与轴的刻度标签重叠。
  • ax1.legend(graphs, [g.get_label() for g in graphs], loc=5)绘制图例如下:
  • [g.get_label() for g in graphs]获取在绘制图形时设置的每个图形的标签列表。
  • loc = 5指定将图例绘制在轴的右侧。
  • ax1.yaxis.label.set_color(b.patches[0].get_facecolor())如下设置主轴的y轴标签的颜色:
  • b.patches[0].get_facecolor()获取条形图中第一个条的facecolor值,b.patches []是另存为色块的条的容器。
  • 使用此命令,而不是显式设置颜色,我们将使用用于绘制图形的颜色并将其用于y轴标签。
  • ax2.yaxis.label.set_color(l.get_color()) and ax3.yaxis.label.set_color(l1.get_color())获取线图ll1的颜色,并将它们应用于各自的标签。
  • ax2.spines['right'].set_edgecolor(l.get_color())设置右轴的颜色,用于绘制折线图l。
  • ax3.spines['right'].set_edgecolor(l1.get_color()) 设置第二个右轴的颜色,用于绘制线图l1。
  • ax1.tick_params(axis='y', colors=b.patches[0].get_facecolor())设置刻度和刻度标签的颜色。

执行上述代码后,您应该在屏幕上看到以下图形:

图略

使用AxesDivider绘制散点图和相关的直方图

使用AxesDivider绘制颜色条

使用ImageGrid在网格中使用颜色栏绘制图像

使用inset_locator放大图像

使用inset_locator绘制插入轴

...更多

阅读完整文档

文章分类: 编程碎语Matplotlib