Python Pandas绘制了由secondary_y更改的图层顺序

时间:2017-04-13 16:53:52

标签: python pandas matplotlib

我正在尝试将线图和条形图合并为一个图。数据源是一个pandas数据帧。

这是一个演示:

import pandas as pd
test = {"index": range(10), 
        "line": [i**2 for i in range(10)], 
        "bar": [i*10 for i in range(10)]}
test=pd.DataFrame(test)
ax=test.plot(x="index",y="line")
test.plot(x="index",y="bar",color="r",kind="bar",ax=ax)

到目前为止,一切都很好,你可以看到线条在条形图上方。如果我通过将最后一行更改为:

,请在右侧使用辅助yaxis询问条形图
test.plot(x="index",y="bar",color="r",kind="bar",ax=ax, secondary_y=True)

然后条形线将位于线条顶部,这不是我想要的。

以下是两个图:

Use only one y axis Use both left and right y axis

我试图首先绘制条形图然后绘制线条,我也尝试使用zorder来强制条形图上方的线条,但它们都不起作用。

任何建议或帮助都将不胜感激。

1 个答案:

答案 0 :(得分:4)

第二个轴将始终位于第一个轴的顶部。因此,您需要最后绘制线图以使其显示在条形图的顶部。 您可以考虑以下解决方案,该方法将行设置为二级标度:

import pandas as pd
test = {"index": range(10), 
        "line": [i**2 for i in range(10)], 
        "bar": [100*i*10 for i in range(10)]}
test=pd.DataFrame(test)

ax  = test.plot(x="index",y="bar",color="r",kind="bar")
ax2 = test.plot(x="index",y="line", color="b", ax=ax, secondary_y=True)
ax.set_ylabel("bar", color="r")
ax2.set_ylabel("line", color="b")

enter image description here

如果您想在图表的左侧使用线条比例,您可以在之后交换比例:

import pandas as pd
test = {"index": range(10), 
        "line": [i**2 for i in range(10)], 
        "bar": [100*i*10 for i in range(10)]}
test=pd.DataFrame(test)

ax  = test.plot(x="index",y="bar",color="r",kind="bar")
ax2 = test.plot(x="index",y="line", color="b", ax=ax, secondary_y=True)

ax.yaxis.tick_right()
ax2.yaxis.tick_left()
ax.set_ylabel("bar", color="r")
ax2.set_ylabel("line", color="b")
ax.yaxis.set_label_position("right")
ax2.yaxis.set_label_position("left")

enter image description here