使用pandas和matplotlib.pyplot创建一个图例

时间:2014-02-27 13:38:49

标签: python matplotlib pandas

这是我第一次尝试使用python进行绘图,而且我在创建传奇时遇到了问题。

这些是我的进口商品:

import matplotlib.pyplot as plt
import pandas

我加载了这样的数据:

data = pandas.read_csv( 'data/output/limits.dat', sep=r"\s+", encoding = 'utf-8' )

并将其绘制成如下:

axdata = data.plot( label = '$|U|^{2}$' , x = 'mass', y = 'U2',
                    style = '-s', markeredgecolor = 'none' )

显然axdata现在是AxesSubplot

现在我想像here这样创建一个图例:

plt.legend( (line1), ('label1') )

但我不知道如何从line

中提取AxesSubplot个对象

plt.legend()关于它自己的作品,但我只想让我的一些线条在传奇中出现。这是正确的方法吗?我可以在这里使用另一个命令吗?

修改

例如,如果我尝试:

plt.legend( [axdata], ['U2'])

我收到错误:

~/.virtualenvs/science/lib/python3.3/site-packages/matplotlib/legend.py:613:
UserWarning: Legend does not support Axes(0.125,0.1;0.775x0.8)
Use proxy artist instead.

http://matplotlib.sourceforge.net/users/legend_guide.html#using-proxy-artist

(str(orig_handle),))

我还没有弄清楚代理艺术家是什么,但我认为它是一个工具,当你使用非默认的图形对象,我认为可能不是这里的情况,因为我试图产生一个正常的matlibplot情节。 “非违约”和“正常”这两个词是我的 - 我不确定它们的意思。

另一个编辑:(因为我误读了评论)

它本身的

plt.legend()不向控制台输出任何内容,但结果图现在有一个从绘制数据自动生成的图例。

1 个答案:

答案 0 :(得分:38)

我认为你想要做的是能够在你的情节中为一部分线条显示一个图例。这应该这样做:

df = pd.DataFrame(np.random.randn(400, 4), columns=['one', 'two', 'three', 'four'])
ax1 = df.cumsum().plot()
lines, labels = ax1.get_legend_handles_labels()
ax1.legend(lines[:2], labels[:2], loc='best')  # legend for first two lines only

给予

enter image description here