在matplotlib中绘制两个Pandas系列后创建图例[英] Creating legend in matplotlib after plotting two Pandas Series

本文是小编为大家收集整理的关于在matplotlib中绘制两个Pandas系列后创建图例的处理方法,想解了在matplotlib中绘制两个Pandas系列后创建图例的问题怎么解决?在matplotlib中绘制两个Pandas系列后创建图例问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我用相同的 x 轴从同一个 DataFrame 中绘制了两个 Pandas 系列,一切正常.但是,当我尝试手动创建图例时,它会出现,但只有标题而不是实际内容.我已经尝试过其他解决方案,但没有任何运气.这是我的代码:

    fig = plt.figure()
    ax1 = fig.add_subplot(111)
    ax2 = ax1.twinx()

    width = .3

    df.tally.plot(kind='bar', color='red', ax=ax1, width=width, position=1, grid=False)
    df.costs.plot(kind='bar', color='blue', ax=ax2, width=width, position=0, grid=True)

    ax1.set_ylabel('Tally')
    ax2.set_ylabel('Total Cost')

    handles1, labels1 = ax1.get_legend_handles_labels()
    handles2, labels2 = ax2.get_legend_handles_labels()

    plt.legend([handles1, handles2], [labels1, labels2], loc='upper left', title='Legend')
    plt.show()
    plt.clf()

推荐答案

也许你有充分的理由按照自己的方式去做,但如果没有,这会容易得多:

In [1]:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# Optional, just better looking
import seaborn as sns

# Generate random data
df = pd.DataFrame(np.random.randn(10,3), columns=['tally', 'costs', 'other'])
df[['tally', 'costs']].plot(kind='bar', width=.3)
plt.show();

Out[1]:

Plot

<小时>

编辑

在了解到这是因为您对另一个的规模有很大不同之后,这里是 pandas 方法:

# Generate same data as Jianxun Li
np.random.seed(0)
df = pd.DataFrame(np.random.randint(50,100,(20,3)), columns=['tally', 'costs', 'other'])
df.costs = df.costs * 5

width = .3

df.tally.plot(kind='bar', color='#55A868', position=1, width=width, legend=True, figsize=(12,6))
df.costs.plot(kind='bar', color='#4C72B0', position=0, width=width, legend=True, secondary_y=True)

plt.show();

在此处输入图片描述

本文地址:https://www.itbaoku.cn/post/1728199.html