在pyplot中,将y轴标签与三个子图中的两个共享。

18 浏览
0 Comments

在pyplot中,将y轴标签与三个子图中的两个共享。

我有以下的代码可以生成所示的图表。\n

import matplotlib.pyplot as plt 
import matplotlib.gridspec as gridspec
import numpy as np
One = range(1,10)
Two = range(5, 14) 
l = len(One)
fig = plt.figure(figsize=(10,6))
gs = gridspec.GridSpec(3, 1, height_ratios=[5, 3, 3]) 
ax0 = plt.subplot(gs[0])
ax0.bar(range(l), Two)
plt.ylabel("事件发生次数")
ax1 = plt.subplot(gs[1], sharey=ax0)
ax1.bar(range(l), Two)
ax2 = plt.subplot(gs[2])
ax2.bar(range(l), One)
plt.show()

\n我想让 ylabel(\"事件发生次数\")在第一个和第二个图表之间共享,即它应该出现在第一个和第二个图表的左上角。我该如何做到这一点?

0
0 Comments

这个问题是关于在pyplot中共享y轴标签的问题。在这个问题中,用户想要在三个子图中的两个子图上共享一个y轴标签。用户提供了两个相关的链接,一个是关于在Matplotlib中创建多个轴的问题的解决方案,另一个是关于在Matplotlib中使用不同刻度的多个轴的问题。

问题的解决方法是使用Matplotlib的AxesGrid1工具包中的ParasiteAxes类。这个类允许在一个轴上放置两个不同比例的坐标系。通过使用这个工具包,用户可以创建一个包含两个子图的主图,然后将第一个子图的轴和第三个子图的轴与主图的两个轴共享。这样就可以实现在两个子图上共享y轴标签的目的。

下面是解决问题的代码示例:

import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import host_subplot
import mpl_toolkits.axisartist as AA
# 创建主图和两个子图
fig = plt.figure()
ax1 = host_subplot(111, axes_class=AA.Axes)
ax2 = host_subplot(111, axes_class=AA.Axes, sharex=ax1)
ax3 = host_subplot(111, axes_class=AA.Axes, sharex=ax1)
# 在第一个子图上绘制数据
ax1.plot([1, 2, 3], [4, 5, 6], 'r-')
# 在第三个子图上绘制数据
ax3.plot([1, 2, 3], [7, 8, 9], 'b-')
# 设置y轴标签
ax1.set_ylabel("Shared Y Label")
ax3.set_ylabel("Shared Y Label")
# 隐藏第二个子图的x轴标签
ax2.xaxis.set_ticklabels([])
# 将第一个子图和第三个子图的y轴连接起来
ax1.axis["left"].label.set_visible(False)
ax1.axis["right"].label.set_visible(True)
ax1.axis["right"].label.set_color('red')
ax3.axis["left"].label.set_visible(False)
ax3.axis["right"].label.set_visible(True)
ax3.axis["right"].label.set_color('blue')
plt.show()

通过使用AxesGrid1工具包中的ParasiteAxes类,我们可以实现在两个子图上共享y轴标签的效果。

0
0 Comments

在这个问题中,使用了matplotlib库中的pyplot模块来绘制图形。具体来说,问题是希望在三个子图中的前两个子图上共享y轴标签,但是在默认情况下,每个子图都有自己的y轴标签。

为了解决这个问题,可以使用pyplot的`ylabel`函数中的`y`参数来手动调整位置。在代码中,`ylabel`函数被用于设置y轴标签,并通过设置`y`参数来调整其位置。

具体的解决方法如下:

1. 首先导入所需的库:

import matplotlib.pyplot as plt 
import matplotlib.gridspec as gridspec
import numpy as np

2. 定义数据:

One = range(1,10)
Two = range(5, 14)
l = len(One)

3. 创建一个图形对象并设置大小:

fig = plt.figure(figsize=(10,6))

4. 创建一个网格布局,其中包含3个子图,并通过设置`height_ratios`参数来调整每个子图的高度比例:

gs = gridspec.GridSpec(3, 1, height_ratios=[5, 3, 3])

5. 在第一个子图上创建条形图,并设置y轴标签:

ax0 = plt.subplot(gs[0])
ax0.bar(range(l), Two)
plt.ylabel("Number of occurrence", y=-0.8)

6. 在第二个子图上创建条形图,并通过设置`sharey`参数为第一个子图的轴对象来共享y轴:

ax1 = plt.subplot(gs[1], sharey=ax0)
ax1.bar(range(l), Two)

7. 在第三个子图上创建条形图:

ax2 =  plt.subplot(gs[2])
ax2.bar(range(l), One)

8. 显示图形:

plt.show()

通过以上的步骤,就可以实现在前两个子图上共享y轴标签的效果。

0
0 Comments

问题的出现原因:在pyplot中创建了一个包含三个子图的图形,其中前两个子图共享y轴,但是它们的y轴标签是独立的。这导致y轴标签无法正确显示,给用户带来了困扰。

解决方法:将y轴标签添加到整个图形本身上,并将其定位在中心位置(图形坐标为0.5)。可以使用`fig.text()`函数在图形上添加文本。具体的解决方法如下:

import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
import numpy as np
One = range(1, 10)
Two = range(5, 14)
l = len(One)
# 创建一个大小为10x6的图形
fig = plt.figure(figsize=(10, 6))
# 使用gridspec创建3行1列的子图网格,并指定高度比例
gs = gridspec.GridSpec(3, 1, height_ratios=[5, 3, 3])
# 创建第一个子图,并绘制条形图
ax0 = plt.subplot(gs[0])
ax0.bar(range(l), Two)
# 创建第二个子图,并共享第一个子图的y轴
ax1 = plt.subplot(gs[1], sharey=ax0)
ax1.bar(range(l), Two)
# 创建第三个子图,并绘制条形图
ax2 = plt.subplot(gs[2])
ax2.bar(range(l), One)
# 在图形上添加y轴标签,定位在0.075, 0.5的位置,垂直显示
fig.text(0.075, 0.5, "Number of occurrence", rotation="vertical", va="center")
# 显示图形
plt.show()

通过以上代码,我们可以看到在整个图形的左侧中心位置添加了一个垂直显示的y轴标签"Number of occurrence",解决了子图共享y轴标签的问题。

0