使用pandas和matplotlib.pyplot创建图例

14

这是我第一次尝试使用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

现在我想按照这里的描述来创建图例:

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

但我不知道如何从一个AxesSubplot中提取出一个line对象。

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() 单独使用不会输出任何内容到控制台,但由所绘制的数据自动生成一个图例。


你能提供更多的信息吗?比如 plt.legend() 输出的例子以及你想要图例输出的内容是什么?这将极大地帮助我们理解如何帮助你 :) - Wesley Bowman
如果您执行 ax.legend()plt.draw() 会发生什么? - TomAugspurger
我得到了一个图例,但它包含了所有线条的条目,而不仅仅是返回我的原始axdata对象的那一条。 - paco_uk
1个回答

40

我认为你想要做的是在绘图中显示某些线条的图例。下面的代码应该可以实现:

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


这正是我想做的事情。不幸的是,当我调用 data.plot()(根据 pandas 文档应该是 plt.plot() 的包装器)时,返回的对象不支持 get_legend_handles_labels()。我无法弄清楚如何从中提取线条或将其转换为您示例中的 ax1 类型。 - paco_uk
1
ax1是从调用pandas.DataFrame.plot()返回的matplotlib.axes.AxesSubplot。它正是data.plot()应该返回的内容。如果没有运行代码进行调试,我不确定问题可能是什么,很抱歉。 - jmz
这是一个笔误 :(. 原来我拼错了标签。感谢您的演示。 - paco_uk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接