我使用以下代码生成了一个条形+线条图:
import pandas as pd
import matplotlib
import numpy as np
import random
%matplotlib inline
df = pd.DataFrame(np.random.randint(0,100,size=(20, 5)), columns=list('ABCDE'))
ax = df[['E']].plot(
secondary_y = True,
x=df.A,
kind='bar',
)
ax.legend(['EE'])
df[['A','B','C','D']].plot(
linestyle='-',
marker='o',
ax=ax
)
ax.legend(['AA','BB','CC','DD'])
ax.autoscale(enable=True, axis='both', tight=False)
我想更改剧情中每个系列的图例条目(例如改为AA
而不是A
等等),但我很难弄清楚如何做这个。有人可以帮忙吗?
我尝试使用matplotlib 2.0.2运行ImportanceOfBeingErnest的代码并得到以下错误,但升级到2.1后它可以正常工作。
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-4-c26e970bbe42> in <module>()
10
11 ax.figure.legend(['AA','BB','CC','DD'],
---> 12 bbox_to_anchor=(1.,1),loc=1, bbox_transform=ax.transAxes)
13 ax.autoscale(enable=True, axis='both', tight=False)
14 plt.show()
TypeError: legend() missing 1 required positional argument: 'labels'
答案 0 :(得分:1)
以下适用于matplotlib 2.1或更高版本。
你可以添加一个图形图例,它将考虑所有图形中的所有艺术家。然后将legend=False
设置为各个pandas图,最后创建一个图例可能会给你你想要的东西。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
#%matplotlib inline
df = pd.DataFrame(np.random.randint(0,100,size=(20, 5)), columns=list('ABCDE'))
ax = df[['E']].plot( secondary_y = True, x=df.A, kind='bar', legend=False)
ax = df[['A','B','C','D']].plot( linestyle='-', marker='o',legend=False, ax=ax)
ax.figure.legend(['AA','BB','CC','DD'],
bbox_to_anchor=(1.,1),loc=1, bbox_transform=ax.transAxes)
ax.autoscale(enable=True, axis='both', tight=False)
plt.show()