2

セグメントごとの色がそのセグメントの頻度を表す、同じサイズのセグメントを持つ円グラフを作成するにはどうすればよいでしょうか?

これは、時計グリフとも呼ばれます。円グラフを 24 のセグメントに分割し、カラーマップに基づいて時間セグメントの色を決定する時間の頻度データをプロットすることを目指しています。

データは次のようになります (5 時間)。

data = [3,34,76,11,90]

そして私のカラーマップ(mycm)は次のとおりです。

mycm = LinearSegmentedColormap.from_list('mycm',['k','r'])]

等しいセグメントを作成するには、次のようなものを使用すると思います。

plt.pie([1,1,1,1,1], labels=None, shadow=False, radius=0.5)

しかし、データの頻度値に基づいて定義したカラーマップを使用して、これらをどのように色付けできますか?

前もって感謝します!

4

1 に答える 1

2

必要なコードは以下のとおりで、matplotlib python の円グラフのスライスの色付けから適応されました。基本的に、各スライスのフラックスはすべて同じ値になります (すべてのスライスが同じサイズになるように) が、colors パラメータによって色が変わります。頻度やその他の必要に応じて色をマッピングします。

fracs = ones(len(data))*1/len(data)
my_norm = matplotlib.colors.Normalize(min(data),max(data)) #this is how we will map our data

c1 = matplotlib.colors.LinearSegmentedColormap.from_list('mycm',['k','r'])

plt.pie(fracs, labels=None, shadow=False, radius=0.5, colors=c1(my_norm(data)))

データの分布によっては、線形マッピングを使用してデータ ポイントを色にマッピングしているため、円グラフが数色しかないように見える場合があります。非線形マップが必要な場合は、データのマッピング方法 (my_norm 関数) で変更できます。たとえば、色をマッピングするのではなく、N 色の差を最大にするために、カラー ホイールの周りに等距離の色配列を作成し、色を循環させることができます。

于 2013-10-30T13:39:19.837 に答える