我正在尝试修改mpl example,每列共享x,每行y,我想将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刻度标签,但左侧刻度在第二列中消失。为什么会这样?
答案 0 :(得分:0)
当你保持第一个循环时,对ax.set_yticklabels([])
的调用会杀死你的勾选标签的所有,因为当你共享轴时,勾选标签文本会被链接。使用axes_grid1的演示here演示了一些方法,如果你想要不同的刻度/标签。
但是,对于这个简单的示例,您可以专门将ticklabels设置为右侧,并单独拉出相关的其他标签对象以关闭其可见性。如果您使用以下内容替换已修改的部分:
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')
右侧有刻度标签。我不确定这是否是最有效的方法,但它确实有效。