猿问

twinx 网格线的可见性

使用 来创建具有两个不同高度比例的重叠条形图时Axes.twinx(),我无法将“双”轴集的垂直网格线设置为可见。水平线虽然工作正常。关于如何解决这个问题的任何想法?


下面是一些示例代码,说明了我想做什么和我不能做什么。正如所见,垂直网格线被 的红色条隐藏ax2,而我希望网格线通过所有条可见。


# Create figure and figure layout

ax1 = plt.subplot()

ax2 = ax1.twinx()


# Example data

x = [0, 1, 2, 3, 4, 5]

h1 = [55, 63, 70, 84, 73, 93]

h2 = [4, 5, 4, 7, 4, 3]


# Plot bars

h1_bars = ax1.bar(x, h1, width=0.6, color='darkblue')

h2_bars = ax2.bar(x, h2, width=0.6, color='darkred')


# Set y limits and grid visibility

for ax, ylim in zip([ax1, ax2], [100, 10]):

    ax.set_ylim(0, ylim)

    ax.grid(True)

出现错误是因为 的垂直网格线ax2未设置为可见。这可以通过设置来测试ax1.grid(False),在这种情况下,只有水平网格线。

http://img.mukewang.com/61bc4b5f00014d7c03960252.jpg

我已经试过的所有组合ax1.xaxis.grid(True)ax1.yaxis.grid(True)ax2.xaxis.grid(True)ax2.yaxis.grid(True)没有任何的运气。对此事的任何帮助深表感谢!


尚方宝剑之说
浏览 146回答 1
1回答

qq_遁去的一_1

您可以恢复 ax1 和 ax2 的角色,这样蓝色条在 ax2 上,红色条在 ax1 上。然后您需要将双轴放在背景中,并在图的另一侧勾选相应的 y 轴。import matplotlib.pyplot as plt# Create figure and figure layoutax1 = plt.subplot()ax2 = ax1.twinx()# Example datax = [0, 1, 2, 3, 4, 5]h1 = [55, 63, 70, 84, 73, 93]h2 = [4, 5, 4, 7, 4, 3]# Plot barsh1_bars = ax2.bar(x, h1, width=0.6, color='darkblue')h2_bars = ax1.bar(x, h2, width=0.6, color='darkred')# Set y limits and grid visibilityfor ax, ylim in zip([ax1, ax2], [10, 100]):    ax.set_ylim(0, ylim)    ax.grid(True)ax1.set_zorder(1)ax1.patch.set_alpha(0)ax2.set_zorder(0)ax1.yaxis.tick_right()ax2.yaxis.tick_left()plt.show()
随时随地看视频慕课网APP

相关分类

Python
我要回答