【问题标题】:Changing xticks for one subplot with shared x axis [duplicate]更改具有共享 x 轴的一个子图的 xticks [重复]
【发布时间】:2019-11-09 14:26:00
【问题描述】:

我想在许多子图中的一个子图中更改 xlimits 和 xticks,但它只适用于 xticks。

我正在绘制许多图,几乎所有图都具有相同的 x 轴,在一个图中,因此决定使用plt.subplots(sharex=True)。对于一个情节,我希望我的 x 轴上有不同的限制和刻度。为此,我使用 ax.get_shared_x_axes().remove(ax) 从其他 sharex 图中删除了此图。


import matplotlib.pyplot as plt
fig, axes = plt.subplots(4,10,sharey=True, sharex=True)

axes_flat = axes.flat

for i in range(0,33) :
   xs = axes_flat[i]
   xs.plot([0,1,2],[2,3,4])
   xs.set_xticks([0,2])
   xs.set_xlim([0,4])


#leave some room between normal plots and plots with different xlims:
axes_flat[34].axis('off')
axes_flat[35].axis('off')

# Remove this plot from the shared axes and change xlims and xticks:
axes_flat[36].get_shared_x_axes().remove(axes_flat[36])
axes_flat[36].set_xticks([0,1])
axes_flat[36].set_xlim([0,2])

axes_flat[38].axis('off')
axes_flat[39].axis('off')

plt.show()

这适用于 x 限制,但不适用于 xticks。更改一个子图中的刻度会覆盖所有其他刻度,而 x 限制仅在子图中更改,这是我想要的。我不明白为什么set_xticksset_xlim 在这种情况下会表现不同。有没有办法解决这个问题,同时仍然使用plt.subplots(sharex=True)

【问题讨论】:

  • 试试this
  • 谢谢,我已经尝试过很多次了,但它对我不起作用。您实际上可以在您给出的示例中看到,那里的滴答声也发生了一些奇怪的事情。
  • 重置共享时,所有轴上的代码仍然相同,因此在任何轴上更改它都适用于所有轴。
  • 那我怎么只改变一个轴上的代码呢?
  • 所以我想你的代码来自this question?我给出了一个新的答案,并建议将其作为重复项关闭,以便现有的解决方案都留在一个地方。

标签: python matplotlib subplot


【解决方案1】:

我不知道有没有办法使用plt.subplots(shared=True) 做到这一点,但我做了一些类似的事情,你可以这样做:

ax1 = plt.subplot(121)
ax1.set_ylim(0, means_sd['mean'].max()+2)
ax1.bar(x=0, bottom=0, width=0.8, height=ref, color='gray')
ax1.set_xticks(list(range(len(data))))
ax1.set_xticklabels(s for s in labels)


ax2 = plt.subplot(122)
ax2.set_ylim(0, means_sd['mean'].max()+2)
ax2.bar(x=0, bottom=0, width=0.8, height=ref, color='gray')
ax2.set_xticks(list(range(len(data))))
ax2.set_xticklabels(s for s in labels)

我希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2020-03-06
    • 1970-01-01
    • 1970-01-01
    • 2019-03-22
    • 1970-01-01
    • 2018-01-04
    • 2018-03-31
    • 2017-04-22
    • 1970-01-01
    相关资源
    最近更新 更多