这是我第一次尝试使用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()
不向控制台输出任何内容,但结果图现在有一个从绘制数据自动生成的图例。
答案 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
给予