1

更新、編集されたコードを 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
4

2 に答える 2

1

あなたが使用している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色パラメーターがないため、エラーが発生しました。ラベルに正しい色が表示されなかった理由はわかりませんが、色が何であるかを明示的に述べる必要はありません。これらはaxesオブジェクトに含まれているためです。凡例に表示されるように、プロット メソッドでラベルを定義することもできます。がんばれ![ここに画像の説明を入力1

于 2016-02-07T16:49:41.973 に答える
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()
于 2016-02-09T08:08:21.330 に答える