pandas DataFrame如何混合不同比例的条形图和线条图

har*_*jay 4 python plot matplotlib pandas

我想让大熊猫覆盖条形图和线条图.这两个系列有不同的比例,所以我希望将值绘制在两个"y"轴上.我不能让熊猫一起显示"酒吧"和"线"图.

from pandas import DataFrame

df_eg = DataFrame()
df_eg=DataFrame(data=[(1212,231),(9283,624),(11734,943),(12452,1037),(16766,1037),(120,113)],index=[2014,2015,2016,2017,2018,2019],columns=["Release","Hold"])
Run Code Online (Sandbox Code Playgroud)

这给出了DataFrame

       Release  Hold
2014    1212    231
2015    9283    624
2016    11734   943
2017    12452   1037
2018    16766   1037
2019    120     113
Run Code Online (Sandbox Code Playgroud)

现在,如果我尝试将"释放"绘制为条形图并将"保持"列绘制为具有双轴的线,则仅获得该线.

fig, ax = plt.subplots()
ax2 = ax.twinx()
plt.hold(False)
df_eg["Release"].plot(ax=ax,kind="bar")
df_eg["Hold"].plot(ax=ax2, style='r-', secondary_y=True)
ax.legend(loc='best')
Run Code Online (Sandbox Code Playgroud)

pandas_plot_without_bar_shwoing_up

但是,如果我将两者都绘制为线条.两个值都显示出来.我想知道如何使条形图和线条出现在同一个图上.我正在使用pandas版本'0.16.2'和matplotlib版本'1.3.1'.

fig, ax = plt.subplots()
ax2 = ax.twinx()
plt.hold(False)
df_eg["Release"].plot(ax=ax,kind="line")
df_eg["Hold"].plot(ax=ax2, style='r-', secondary_y=True)
ax.legend(loc='best')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

Kar*_*tik 13

这会解决您的问题吗?

fig, ax = plt.subplots()
ax2 = ax.twinx()
ax.bar(df_eg.index, df_eg["Release"], color=(190/255,190/255,190/255,0.7), label='Release')
ax2.plot(df_eg.index, df_eg["Hold"], color='green', label='Hold')
ax.set_xticklabels(df_eg.index)
ax.legend(loc='best')
Run Code Online (Sandbox Code Playgroud)

最终情节


Pat*_*ald 7

这完全可以用pandas来完成,包括标签和图例:

import pandas as pd    # v 1.1.3

df = pd.DataFrame(data=[(1212,231), (9283,624), (11734,943), (12452,1037), (16766,1037), (120,113)],
                  index=[2014, 2015, 2016, 2017, 2018, 2019], columns=['Release', 'Hold'])

ax =  df.plot.bar(y='Release', ylabel='Release', figsize=(8, 5))
df.plot(y='Hold', c='k', ax=ax, use_index=False, secondary_y=True, mark_right=False)
ax.right_ax.set_ylabel('Hold');
Run Code Online (Sandbox Code Playgroud)

pandas_line_bar