我正在尝试使用 Matplotlib 绘制 Pandas 数据框。数据框包含四个由自然数组成的数据列和一个整数索引。我想为四列中的每一列生成一个带有折线图的图,以及每个点的误差线。此外,我想制作一个图例,为四个图形线中的每一个提供标签。
绘制没有误差线的线条和图例效果很好。然而,当我引入误差线时,图例变得无效——它使用的颜色不再对应于适当的线条。如果您比较带有误差线的图表和不带误差线的图表,则图例和曲线的形状/位置保持完全相同。然而,曲线的颜色会切换,因此尽管使用了相同的四种颜色,但它们现在对应于不同的曲线,这意味着图例现在为每条曲线分配了错误的标签。
因此,我的图形代码是:
def plot_normalized(agged, show_errorbars, filename):
combined = {}
# "agged" is a dictionary containing Pandas dataframes. Each dataframe
# contains both a CPS_norm_mean and CPS_norm_std column. By running the code
# below, the single dataframe "combined" is created, which has integer
# indices and a column for each of the four CPS_norm_mean columns contained
# in agged's four dataframes.
for k in agged:
combined[k] = agged[k]['CPS_norm_mean']
combined = pandas.DataFrame(combined)
plt.figure()
combined.plot()
if show_errorbars:
for k in agged:
plt.errorbar(
x=agged[k].index,
y=agged[k]['CPS_norm_mean'],
yerr=agged[k]['CPS_norm_std']
)
plt.xlabel('Time')
plt.ylabel('CPS/Absorbency')
plt.title('CPS/Absorbency vs. Time')
plt.savefig(filename)
完整的100 行脚本可在 GitHub 上找到。要运行,请下载 graph.py 和 lux.csv,然后运行“python2 graph.py”。它将在您的工作目录中生成两个 PNG 文件——一个带有错误栏的图形,一个没有。
因此,这些图表是:
- 正确的图表(没有误差线):
- 不正确的图表(带有误差线):
观察没有误差线的图形是否被正确标记;请注意,带有错误条的图形标记不正确,就好像图例相同,折线图的颜色变化意味着每个图例条目现在指的是不同的(错误的)曲线。
感谢您的任何帮助,您可以提供。我花了好几个小时把我的头撞在墙上,我怀疑我犯了一个愚蠢的初学者的错误。对于它的价值,我已经尝试使用 Matplotlib 开发树,版本 1.2.0 和 1.1.0,并且所有三个都表现出相同的行为。