首页 > 解决方案 > 我的图形图例颜色与我的图形线颜色不匹配?

问题描述

我正在尝试在图表上绘制两条线,并且正在努力将我的图例颜色与图表线颜色相匹配。当我尝试为绘图上的线条分配颜色时,它只会更改图例,虽然它也改变了图形的线条颜色,但它们与图例不匹配!

这是我的代码的基础。

import pandas as pd
import matplotlib.pyplot as plt

df_mated = pd.read_csv("file1.txt", sep='\t', header=0)   
df_mated['Average'] = df_mated.mean(axis=1)
df_mated['SEM'] = df_mated.loc[:, :'Average'].sem()
mated_E = df_mated['SEM'].tolist()
b = df_mated['Average'].tolist()
plot1, = plt.plot(x, b, 'r-')
plt.errorbar(x, b, xerr=None, yerr=mated_E)

df_unmated = pd.read_csv("file2.txt", sep='\t', header=0) 
df_unmated['Average'] = df_unmated.mean(axis=1)
df_unmated['SEM'] = df_unmated.loc[:, :'Average'].sem()
unmated_E = df_unmated['SEM'].tolist()
c = df_unmated['Average'].tolist()
plot2, = plt.plot(x, c, 'b-')
plt.errorbar(x, c, xerr=None, yerr=unmated_E)

plt.xlabel('Position')
plt.ylabel('Average Read Depth')
plt.legend([plot1,plot2],["Mated", "Unmated"])
plt.show()

这是我得到的: 输出图

如您所见,颜色不匹配,但更重要的是,匹配的红线绝对应该是图表上的顶线。我已经通过打印列表 b 和 c 验证了这一点,所以我确定。

如果我删除 'r-' 和 'b-' 我会得到下图:输出图 2

还是不对...

我是 python 和编码的新手,所以如果您需要更多信息,请告诉我。谢谢你的帮助!

PS您可能会看到我的误差线也仅适用于图形的一半,因为 .sem() 为我的 pandas 数据框中的某些值生成 NaN。我认为这可能是由于除以 0 错误,因为我的所有数据都是非常小的浮点数 - 但如果您有任何见解,也将不胜感激!

标签: pythonmatplotliblegend

解决方案


错误线隐藏了您在图例中显示的线。您可以删除多余的图,并以相应的颜色绘制误差线(线)。所以而不是

plot1, = plt.plot(x, b, 'r-')
plt.errorbar(x, b, xerr=None, yerr=mated_E)
# ...
plot2, = plt.plot(x, c, 'b-')
plt.errorbar(x, c, xerr=None, yerr=unmated_E)

采用

plot1, _, _ = plt.errorbar(x, b, xerr=None, yerr=mated_E, color="r")
# ...
plot2, _, _ = plt.errorbar(x, c, xerr=None, yerr=unmated_E, color="b")

推荐阅读