83657


PandasのDataFrameのplotメソッドで、折れ線グラフに、追加で横棒グラフを表示させたいのですが、  
表示順(zorder)の指定ができず困っています。（現状は棒グラフを半透明色にしてごまかしています。）  
棒グラフを最背面へ、凡例を最前面へ表示を指定することは可能でしょうか？

[code]

    # zorderが効かない例(pd.DataFrameのplotメソッドを利用)
    import pandas as pd
    
    df = pd.DataFrame(data={ 'value':[ 100, 200, 300, 200 ] }, index=[ 10, 20, 30, 40 ])
    ax = df.plot(zorder=2)
    
    x = [ 100, 200, 300 ]
    y = [ 20, 25, 30 ]
    twin_ax = ax.twiny()
    twin_ax.barh(x, y, color='#00ff00', height=50, zorder=1) # 横棒グラフ
    plt.show() # 描画
    
[/code]

[![表示順が指定できない例](https://i.stack.imgur.com/EmZHY.png)](https://i.stack.imgur.com/EmZHY.png)

以下は、他サイトで調べたうまくいく例です。  
matplotlibを直接利用しないと表示順(zorder)は指定できないものなのでしょうか？  
よろしくお願いします。

[code]

    # zorderが有効な例(matplotlibを直接利用)
    import pandas as pd
    import matplotlib.pyplot as plt
    x = [ 100, 200, 300 ]
    y = [ 20, 25, 30 ]
    plt.plot(x, y, zorder=2, color='r')
    plt.scatter(x, y, zorder=1, s=200)
    plt.show() # 描画
    
[/code]


CC BY-SA 4.0
2021-11-16T04:06:18.663
83648
2021-11-16T12:55:28.763
35267
question
python pandas matplotlib
PandasのDataFrameのplotメソッドで、同軸グラフの表示順を指定したい


[matplotlib.axes.Axes.set_zorder](https://matplotlib.org/3.2.2/api/_as_gen/matplotlib.axes.Axes.set_zorder.html)
で ax 自体の `z_order` を変更してみました。

[code]

    import pandas as pd
    import matplotlib.pyplot as plt
    
    df = pd.DataFrame(data={ 'value':[ 100, 200, 300, 200 ] }, index=[ 10, 20, 30, 40 ])
    ax = df.plot()
    
    x = [ 100, 200, 300 ]
    y = [ 20, 25, 30 ]
    twin_ax = ax.twiny()
    twin_ax.barh(x, y, color='#00ff00', height=50) # 横棒グラフ
    
    ax.set_zorder(2)
    ax.patch.set_alpha(0)
    twin_ax.set_zorder(1)
    
    plt.show() # 描画
    
[/code]

[![z_order](https://i.stack.imgur.com/3We3l.png)](https://i.stack.imgur.com/3We3l.png)


CC BY-SA 4.0
2021-11-16T12:55:28.763
83657
2021-11-16T12:55:28.763
47127
83648
answer