2016-10-18 6 views
0

複数のデータフレーム棒グラフを同じグラフにプロットするにはどうすればよいですか?同じチャートの複数のパンダのデータフレーム棒グラフ

私は上位3つのスコア(または上位5つ)をプロットしたいと思います。私は1st> = 2nd> = 3rdを知っているので、3つ(または5つ)のバーにそれらを広げずに、同じバーの上の3つ(または5つ)をチャートにプロットしたいと思います。

視覚効果は積み重ね棒とまったく同じですが、棒はお互いの上に積み重なりませんが、代わりに下から測定されます。

stacked bar

UPDATE: @DizietAsahiではなく、積み重ね棒グラフを使用することが提案。私はそれが最も簡単な解決策だと思います。誰かが以下のスコアの差を取得するためにデータフレーム操作コードを提供できますか?

ソースデータは、CSV形式の次のデータと同様に、TIDScoreの形式になっています。これは、すでにフィルタされているため、トップ3のみが残っています。生データは、同じTIDについてより多くのスコアを有する。このように進むことの挑戦は、MEANスコアだけでなく、トップ3もプロットする必要があるということです。私は個人的には、以下の点との相違点を得るために、MEANスコアと同時に3つのトップスコアを操作することは不可能だと個人的に考えています。だからどちらの方法にも(私にとっては)挑戦があります。ここ

は、CSV形式のサンプルデータである。

TID,Score 
06,510 
06,472 
06,441 
07,630 
07,619 
07,574 
08,617 
08,589 
08,560 
09,610 
09,595 
09,553 
10,593 
10,550 
10,542 
11,442 
11,404 
11,381 

データフレームフォーマットにおいて(のみ複数のデータフレームバーチャートの場合の積層バーを使用するため、各TIDためScoreとして乱数の束を生成することであろう。 )ファイン:

Scores = [ 
{"TID":07,"ScoreRank":1,"Score":834,"Average":690}, 
{"TID":07,"ScoreRank":2,"Score":820,"Average":690}, 
{"TID":07,"ScoreRank":3,"Score":788,"Average":690}, 
{"TID":08,"ScoreRank":1,"Score":617,"Average":571}, 
{"TID":08,"ScoreRank":2,"Score":610,"Average":571}, 
{"TID":08,"ScoreRank":3,"Score":600,"Average":571}, 
{"TID":09,"ScoreRank":1,"Score":650,"Average":584}, 
{"TID":09,"ScoreRank":2,"Score":644,"Average":584}, 
{"TID":09,"ScoreRank":3,"Score":618,"Average":584}, 
{"TID":10,"ScoreRank":1,"Score":632,"Average":547}, 
{"TID":10,"ScoreRank":2,"Score":593,"Average":547}, 
{"TID":10,"ScoreRank":3,"Score":577,"Average":547}, 
{"TID":11,"ScoreRank":1,"Score":479,"Average":409}, 
{"TID":11,"ScoreRank":2,"Score":445,"Average":409}, 
{"TID":11,"ScoreRank":3,"Score":442,"Average":409}, 
{"TID":12,"ScoreRank":1,"Score":370,"Average":299}, 
{"TID":12,"ScoreRank":2,"Score":349,"Average":299}, 
{"TID":12,"ScoreRank":3,"Score":341,"Average":299}, 
{"TID":13,"ScoreRank":1,"Score":342,"Average":252}, 
{"TID":13,"ScoreRank":2,"Score":318,"Average":252}, 
{"TID":13,"ScoreRank":3,"Score":286,"Average":252}, 
{"TID":14,"ScoreRank":1,"Score":303,"Average":257}, 
{"TID":14,"ScoreRank":2,"Score":292,"Average":257}, 
{"TID":14,"ScoreRank":3,"Score":288,"Average":257}, 
{"TID":15,"ScoreRank":1,"Score":312,"Average":242}, 
{"TID":15,"ScoreRank":2,"Score":276,"Average":242}, 
{"TID":15,"ScoreRank":3,"Score":264,"Average":242}, 
{"TID":16,"ScoreRank":1,"Score":421,"Average":369}, 
{"TID":16,"ScoreRank":2,"Score":403,"Average":369}, 
{"TID":16,"ScoreRank":3,"Score":398,"Average":369}, 
{"TID":17,"ScoreRank":1,"Score":479,"Average":418}, 
{"TID":17,"ScoreRank":2,"Score":466,"Average":418}, 
{"TID":17,"ScoreRank":3,"Score":455,"Average":418}, 
{"TID":18,"ScoreRank":1,"Score":554,"Average":463}, 
{"TID":18,"ScoreRank":2,"Score":521,"Average":463}, 
{"TID":18,"ScoreRank":3,"Score":520,"Average":463}] 
df = pandas.DataFrame(Scores) 

おかげ

+0

例のデータフレームを提供することが可能だろうか? –

+0

@ ShivamGaurでは、CSV形式のサンプルデータとデータフレーム形式が利用可能になりました。ありがとう。 – xpt

+0

ちょうど積み重ねプロットは、以下の点数の差として各レベルを計算します。 –

答えて

1

これは、あなたが探しているものですか?

import pandas 
import matplotlib.pyplot as plt 
import numpy as np 
Scores = [ 
{"TID":7,"ScoreRank":1,"Score":834,"Average":690}, 
{"TID":7,"ScoreRank":2,"Score":820,"Average":690}, 
{"TID":7,"ScoreRank":3,"Score":788,"Average":690}, 
{"TID":8,"ScoreRank":1,"Score":617,"Average":571}, 
{"TID":8,"ScoreRank":2,"Score":610,"Average":571}, 
{"TID":8,"ScoreRank":3,"Score":600,"Average":571}, 
{"TID":9,"ScoreRank":1,"Score":650,"Average":584}, 
{"TID":9,"ScoreRank":2,"Score":644,"Average":584}, 
{"TID":9,"ScoreRank":3,"Score":618,"Average":584}, 
{"TID":10,"ScoreRank":1,"Score":632,"Average":547}, 
{"TID":10,"ScoreRank":2,"Score":593,"Average":547}, 
{"TID":10,"ScoreRank":3,"Score":577,"Average":547}, 
{"TID":11,"ScoreRank":1,"Score":479,"Average":409}, 
{"TID":11,"ScoreRank":2,"Score":445,"Average":409}, 
{"TID":11,"ScoreRank":3,"Score":442,"Average":409}, 
{"TID":12,"ScoreRank":1,"Score":370,"Average":299}, 
{"TID":12,"ScoreRank":2,"Score":349,"Average":299}, 
{"TID":12,"ScoreRank":3,"Score":341,"Average":299}, 
{"TID":13,"ScoreRank":1,"Score":342,"Average":252}, 
{"TID":13,"ScoreRank":2,"Score":318,"Average":252}, 
{"TID":13,"ScoreRank":3,"Score":286,"Average":252}, 
{"TID":14,"ScoreRank":1,"Score":303,"Average":257}, 
{"TID":14,"ScoreRank":2,"Score":292,"Average":257}, 
{"TID":14,"ScoreRank":3,"Score":288,"Average":257}, 
{"TID":15,"ScoreRank":1,"Score":312,"Average":242}, 
{"TID":15,"ScoreRank":2,"Score":276,"Average":242}, 
{"TID":15,"ScoreRank":3,"Score":264,"Average":242}, 
{"TID":16,"ScoreRank":1,"Score":421,"Average":369}, 
{"TID":16,"ScoreRank":2,"Score":403,"Average":369}, 
{"TID":16,"ScoreRank":3,"Score":398,"Average":369}, 
{"TID":17,"ScoreRank":1,"Score":479,"Average":418}, 
{"TID":17,"ScoreRank":2,"Score":466,"Average":418}, 
{"TID":17,"ScoreRank":3,"Score":455,"Average":418}, 
{"TID":18,"ScoreRank":1,"Score":554,"Average":463}, 
{"TID":18,"ScoreRank":2,"Score":521,"Average":463}, 
{"TID":18,"ScoreRank":3,"Score":520,"Average":463}] 

df = pandas.DataFrame(Scores) 
f, ax1 = plt.subplots(1, figsize=(10,5)) 
bar_width = 0.75 
bar_l = [i+1 for i in range(len(np.unique(df['TID'])))] 
tick_pos = [i+(bar_width/2) for i in bar_l] 
ax1.bar(bar_l, 
     df['Score'][df['ScoreRank'] == 1], 
     width=bar_width, 
     label='Rank1', 
     alpha=0.5, 
     color='#eaff0a') 

ax1.bar(bar_l, 

     df['Score'][df['ScoreRank'] == 2], 
     width=bar_width, 
     label='Rank2', 
     alpha=0.5, 
     color='#939393') 

ax1.bar(bar_l, 
     df['Score'][df['ScoreRank'] == 3], 
     width=bar_width, 
     label='Rank3', 
     alpha=0.5, 
     color='#e29024') 

ax1.bar(bar_l, 
     df['Average'][df['ScoreRank'] == 3], 
     width=bar_width, 
     label='Average', 
     alpha=0.5, 
     color='#FF0000') 

plt.xticks(tick_pos, np.unique(df['TID'])) 
ax1.set_ylabel("Score") 
ax1.set_xlabel("TID") 
plt.legend(loc='upper right') 
plt.xlim([min(tick_pos)-bar_width, max(tick_pos)+bar_width]) 
plt.show() 

結果:

enter image description here

+0

絶対に!おかげでたくさんのYugi !!平均でもチャートに入れてもいいですか?ありがとう – xpt

+0

@xpt問題はありません。更新された答えを確認してください – Yugi

+0

うわー、私は自分で修正しようとしていて、コードにコピー・ペーストした後に、平均値が既にグラフ*にあることに気がついたので、ここでチェックしてみました。 – xpt

関連する問題