更新,编辑代码到mcve版本问题在第17行。
我正在尝试从.csv文件中绘制多线图。我已设法将绘图中的默认颜色更改为tableau20配色方案。生成图例时,图例中的颜色仍为默认颜色。如果我尝试将颜色命令添加到图例代码部分,我会收到错误。 TypeError: init ()得到了一个意外的关键字参数' color'。有没有办法将图例颜色与主图表主体中的颜色相匹配?
这是代码和几行数据。
import pandas as pd
from pandas import Series, DataFrame
import matplotlib.pyplot as plt
df=pd.read_csv('cch30.csv')
tableau20 = [(31, 119, 180), (174, 199, 232), (255, 127, 14), (255, 187, 120),
(44, 160, 44), (152, 223, 138), (214, 39, 40), (255, 152, 150)]
for i in range(len(tableau20)):
r, g, b = tableau20[i]
tableau20[i] = (r / 255., g / 255., b / 255.)
ax = df.plot(kind='line', x=df.columns[0],y=df.columns[1:8])
species= ['A. bellonorium', 'A. fuscolingua', 'A. mucronata', 'A. depressa', 'A. novazelandia', 'A. spp', 'A. australis']
for rank, column in enumerate(species):
plt.plot(df.Position.values,
df[column.replace("\n", " ")].values,
lw=1, color=tableau20[rank])
lines, labels = ax.get_legend_handles_labels()
#problem in the next line when i try to tell it to use tableau20 by adding color=tableau20[rank]after fontsize
ax.legend(lines[0:8], labels[0:8], loc='best', fontsize=8, color=tableau20[rank])
plt.show()
Position,A. bellonorium,A. fuscolingua,A. mucronata,A. depressa,A. novazelandia,A. spp,A. australis
1,17,9,33,22,15,20,78
2,17,9,33,21,14,22,77
3,17,9,34,20,14,23,78
4,17,9,35,21,12,23,79
5,17,9,34,22,12,24,75
6,17,9,34,22,13,24,75
7,17,9,34,22,13,24,74
8,17,9,34,22,15,24,76
9,16,9,36,20,14,24,76
10,16,9,36,20,15,26,75
11,16,9,37,20,15,27,74
12,16,9,36,21,15,26,74
13,16,9,34,21,15,27,75
14,16,9,34,23,15,27,75
15,16,9,34,24,16,26,75
16,16,9,34,24,16,28,76
17,16,9,33,24,16,28,77
18,15,9,34,24,14,28,77
19,15,9,32,25,14,28,77
20,15,9,32,25,13,28,77
21,15,9,31,25,13,29,79
22,15,9,31,25,13,29,79
23,15,9,32,25,13,29,78
24,15,9,31,25,12,29,79
25,15,9,30,25,12,29,78
26,15,9,30,25,12,28,79
27,15,9,29,24,13,30,80
28,15,9,30,24,13,30,80
29,14,9,29,23,11,30,77
答案 0 :(得分:0)
我无法运行您的确切代码,因为我无法访问您正在使用的csv,所以我只是猜测您的数据帧是什么样的。但是您应该能够根据需要调整以下代码。我尝试尽可能减少代码,因为如果遇到问题,这将更容易进行故障排除
import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame([[1, 1, 1], [.5, 1, 2]], columns=['A. bellonorium', 'A. fuscolingua', 'A. mucronata'])
tableau20 = [(31, 119, 180), (255, 152, 150), (255, 127, 14)]
tableau20 = [(r/255, g/255, b/255) for r, g, b in tableau20]
f, ax = plt.subplots()
for rank, column in enumerate(df.columns):
ax.plot(df.index, df[column], color=tableau20[rank], label=column)
ax.legend(loc='best')
legend
方法没有颜色参数,这就是您收到错误的原因,我不确定为什么您没有在标签中获得正确的颜色,但是,您不需要明确说明颜色是什么,因为它们包含在轴对象中。您可能还希望在绘图方法中定义标签,以便它们显示在图例中。祝你好运] 1
答案 1 :(得分:0)
这段代码得到了我在这个阶段想要的结果。感谢所有帮助过的人
import pandas as pd
from pandas import Series, DataFrame
import matplotlib.pyplot as plt
df=pd.read_csv('coveragechart.csv')
tableau20 = [(31, 119, 180), (174, 199, 232), (255, 127, 14), (255, 187, 120),
(44, 160, 44), (152, 223, 138), (214, 39, 40), (255, 152, 150)]
for i in range(len(tableau20)):
r, g, b = tableau20[i]
tableau20[i] = (r / 255., g / 255., b / 255.)
f, ax = plt.subplots()
for rank, column in enumerate(df.columns[1:8]):
ax.plot(df.index, df[column], color=tableau20[rank], label=column)
plt.ylabel('Coverage')
plt.xlabel('Position')
ax.legend(loc='best', fontsize=8)
plt.savefig('cov.png', bbox_inches='tight', dpi=300)
plt.show()