y 在 matplotlib 图中标记右侧并共享 x 和 y
y labels right hand side in matplotlib plot with sharing x and y
我正在尝试通过每列共享 x 和每行共享 y 来修改 mpl example,我想将 y 刻度标签放在右侧。
我尝试了类似于 this 的解决方案,即
import matplotlib.pyplot as plt
import numpy as np
# Simple data to display in various forms
x = np.linspace(0, 2 * np.pi, 400)
y = np.sin(x ** 2)
plt.close('all')
# row and column sharing
f, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2, sharex='col', sharey='row')
ax1.plot(x, y)
ax1.set_title('Sharing x per column, y per row')
ax2.scatter(x, y)
ax3.scatter(x, 2 * y ** 2 - 1, color='r')
ax4.plot(x, 2 * y ** 2 - 1, color='r')
#my "contribution" to the code:
for ax in [ax1,ax3]:
ax.yaxis.set_ticks_position('both')
ax.set_yticklabels([])
for ax in [ax2,ax4]:
ax.yaxis.set_ticks_position('both')
ax.yaxis.tick_right()#right hand side tickslabels
plt.show()
这适用于单个绘图,但不适用于此处:根本没有 y 刻度标签。
建议?将 x 标签放在顶部的相同问题。
如果我只使用第二个循环,我会在第一列中获得示例输出,并且至少在第二列中获得右侧 y 刻度标签,但左侧刻度在第二列中消失。为什么会这样?
当您保持第一个循环时,对 ax.set_yticklabels([])
的调用会杀死 所有 的刻度标签,因为当您共享轴时,刻度标签文本会变成链接。使用 axes_grid1 的演示 here 演示了一些方法,如果您想要不同的 ticks/labels。
但是,对于这个简单的示例,您可以将刻度标签专门设置在右侧,并分别拉动相关的其他标签对象以关闭它们的可见性。如果您将修改后的部分替换为以下内容:
for ax in [ax1,ax3]:
for label in ax.get_yticklabels():
label.set_visible(False)
for ax in [ax2,ax4]:
# Change the labelling only
ax.yaxis.set_tick_params(labelright='on', labelleft='off')
您会在右侧看到刻度标签。我不确定这是否是最有效的方法,但它确实有效。
我正在尝试通过每列共享 x 和每行共享 y 来修改 mpl example,我想将 y 刻度标签放在右侧。 我尝试了类似于 this 的解决方案,即
import matplotlib.pyplot as plt
import numpy as np
# Simple data to display in various forms
x = np.linspace(0, 2 * np.pi, 400)
y = np.sin(x ** 2)
plt.close('all')
# row and column sharing
f, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2, sharex='col', sharey='row')
ax1.plot(x, y)
ax1.set_title('Sharing x per column, y per row')
ax2.scatter(x, y)
ax3.scatter(x, 2 * y ** 2 - 1, color='r')
ax4.plot(x, 2 * y ** 2 - 1, color='r')
#my "contribution" to the code:
for ax in [ax1,ax3]:
ax.yaxis.set_ticks_position('both')
ax.set_yticklabels([])
for ax in [ax2,ax4]:
ax.yaxis.set_ticks_position('both')
ax.yaxis.tick_right()#right hand side tickslabels
plt.show()
这适用于单个绘图,但不适用于此处:根本没有 y 刻度标签。 建议?将 x 标签放在顶部的相同问题。
如果我只使用第二个循环,我会在第一列中获得示例输出,并且至少在第二列中获得右侧 y 刻度标签,但左侧刻度在第二列中消失。为什么会这样?
当您保持第一个循环时,对 ax.set_yticklabels([])
的调用会杀死 所有 的刻度标签,因为当您共享轴时,刻度标签文本会变成链接。使用 axes_grid1 的演示 here 演示了一些方法,如果您想要不同的 ticks/labels。
但是,对于这个简单的示例,您可以将刻度标签专门设置在右侧,并分别拉动相关的其他标签对象以关闭它们的可见性。如果您将修改后的部分替换为以下内容:
for ax in [ax1,ax3]:
for label in ax.get_yticklabels():
label.set_visible(False)
for ax in [ax2,ax4]:
# Change the labelling only
ax.yaxis.set_tick_params(labelright='on', labelleft='off')
您会在右侧看到刻度标签。我不确定这是否是最有效的方法,但它确实有效。