gpt4 book ai didi

python-2.7 - 顶部有线条的多轴图。 Matplotlib

转载 作者:行者123 更新时间:2023-12-03 23:24:40 24 4
gpt4 key购买 nike

我正在尝试使用 twinx() 创建一个条形/线形组合图,其中线条在条形顶部可见。目前它是这样显示的:

Bar/Line Combo

我还需要将折线图绘制在左侧的垂直轴 (ax) 和右侧的条形 (ax2) 上,就像现在一样。如果我在第二个轴上绘制线,它确实出现在顶部,但显然它出现在错误的轴上(右)

这是我的代码:

    self.ax2=ax.twinx()
df[['Opportunities']].plot(kind='bar', stacked=False, title=get_title, color='grey', ax=self.ax2, grid=False)
ax.plot(ax.get_xticks(),df[['Percentage']].values, linestyle='-', marker='o', color='k', linewidth=1.0)
lines, labels = ax.get_legend_handles_labels()
lines2, labels2 = self.ax2.get_legend_handles_labels()
ax.legend(lines + lines2, labels + labels2, loc='lower right')

标签也有问题,但一次只做一件事。

最佳答案

默认情况下,艺术家似乎是在 ax 上绘制的。首先,然后
双轴艺术家 ax2在上面。因此,由于在您的代码中,线图是在 ax 上绘制的以及 ax2 上的条形图,条形图位于(并遮挡)线的顶部。

(我以为我可以通过指定 zorder 来改变这一点,但这种尝试没有
工作... )

所以解决问题的一种方法是使用 ax绘制条形图和 ax2画线。这会将线放置在条形图的顶部。默认情况下,它还将为 ax 放置 ytick 标签。 (条形图)在左侧,以及 ax2 的 ytick 标签(线)在右边。但是,您可以使用

ax.yaxis.set_ticks_position("right")
ax2.yaxis.set_ticks_position("left")

交换左右 ytick 标签的位置。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import pandas as pd
np.random.seed(2015)

N = 16
df = pd.DataFrame({'Opportunities': np.random.randint(0, 30, size=N),
'Percentage': np.random.randint(0, 100, size=N)},
index=pd.date_range('2015-3-15', periods=N, freq='B').date)
fig, ax = plt.subplots()

df[['Opportunities']].plot(kind='bar', stacked=False, title='get_title',
color='grey', ax=ax, grid=False)
ax2 = ax.twinx()
ax2.plot(ax.get_xticks(), df[['Percentage']].values, linestyle='-', marker='o',
color='k', linewidth=1.0, label='percentage')

lines, labels = ax.get_legend_handles_labels()
lines2, labels2 = ax2.get_legend_handles_labels()
ax.legend(lines + lines2, labels + labels2, loc='best')
ax.yaxis.set_ticks_position("right")
ax2.yaxis.set_ticks_position("left")

fig.autofmt_xdate()
plt.show()

产量

enter image description here

或者, zorder可以设置轴的数量以便绘制 ax以上 ax2 . Paul Ivanov shows how :
ax.set_zorder(ax2.get_zorder()+1) # put ax in front of ax2
ax.patch.set_visible(False) # hide the 'canvas'
ax2.patch.set_visible(True) # show the 'canvas'

因此,
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import pandas as pd
np.random.seed(2015)

N = 16
df = pd.DataFrame({'Opportunities': np.random.randint(0, 30, size=N),
'Percentage': np.random.randint(0, 100, size=N)},
index=pd.date_range('2015-3-15', periods=N, freq='B').date)
fig, ax = plt.subplots()
ax2 = ax.twinx()
df[['Opportunities']].plot(kind='bar', stacked=False, title='get_title',
color='grey', ax=ax2, grid=False)

ax.plot(ax.get_xticks(), df[['Percentage']].values, linestyle='-', marker='o',
color='k', linewidth=1.0, label='percentage')

lines, labels = ax.get_legend_handles_labels()
lines2, labels2 = ax2.get_legend_handles_labels()
ax.legend(lines + lines2, labels + labels2, loc='best')

ax.set_zorder(ax2.get_zorder()+1) # put ax in front of ax2
ax.patch.set_visible(False) # hide the 'canvas'
ax2.patch.set_visible(True) # show the 'canvas'

fig.autofmt_xdate()
plt.show()

产生相同的结果,而不必交换 ax 扮演的角色和 ax2 .

关于python-2.7 - 顶部有线条的多轴图。 Matplotlib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30155440/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com