2016-10-15 16 views
0

(すでにヒストグラムのスタックのようなタイプである)積み上げヒストグラム

OrderedDict([(734242, [1, 0, 1]), (734243, [0, 0, 1]), (734244, [0, 0, 0]), (734245, [3, 0, 1]), (734246, [0, 0, 0]), (734247, [0, 0, 0]), (734248, [0, 0, 0]), (734249, [0, 0, 0]), (734250, [0, 0, 0]), (734251, [0, 0, 0]), (734252, [0, 0, 0]), (734253, [0, 0, 0]), (734254, [0, 0, 0]), (734255, [0, 0, 0]), (734256, [0, 0, 0]), (734257, [0, 0, 0]), (734258, [0, 0, 0]), (734259, [1, 0, 0]), (734260, [0, 0, 0]), (734261, [0, 0, 0]), (734262, [0, 0, 0]), (734263, [0, 0, 0]), (734264, [0, 0, 0]), (734265, [0, 0, 0]), (734266, [0, 0, 0]), (734267, [0, 0, 0]), (734268, [0, 0, 0]), (734269, [0, 0, 0]), (734270, [0, 0, 0]), (734271, [0, 0, 0]), (734272, [0, 0, 0]), (734273, [0, 0, 0]), (734274, [0, 0, 0]), (734275, [0, 0, 0]), (734276, [0, 0, 0]), (734277, [0, 0, 0]), (734278, [0, 0, 0]), (734279, [0, 0, 0]), (734280, [0, 0, 0]), (734281, [0, 0, 0]), (734282, [0, 0, 0]), (734283, [0, 0, 0]), (734284, [0, 0, 0]), (734285, [0, 0, 0]), (734286, [0, 0, 0]), (734287, [0, 0, 0]), (734288, [1, 0, 0])]) のようないくつかのデータを持って、

私はこの

enter image description hereに似積み重ねヒストグラムを作成する方法を

ただし、x軸の値はOrderedDictのキーから取得され、そのキーで見つかった値はスタックされた個々のセグメントの高さですか?

例えば、(734245, [3, 0, 1])は、x座標734245に高さ3のバーを表示し、その上に高さ0のセグメント(不可視)と高さ1のセグメントを表示します。最終的なバー4の高さ。

入力データは約10k x座標で大きくなる可能性があるため、パフォーマンスが重要です。

すべてのライブラリは大歓迎ですが、matplotlibは必須ではありません。

+0

'クラスプロッタ: globalplot XPOSため=なし 、data.itemsにヴァルス():binnumため p_ampl = 0 、列挙にl_ampl(ヴァルス) DEF(自己、データ、色)get_stacked_histo_plot (xpos-0.5、l_ampl + p_ampl)、(xpos + 0.5、l_ampl + p_ampl)、(xpos + 0.5、p_ampl)]、rgbcolor = colors [binnum]: p =ポリゴン[ ) p_ampl = l_ampl + p_ampl 場合globalplot: globalplot + = P他 : globalplot = P 動作しますが、それができる場合、私は思っていたglobalplot''' – Flavius

+0

(sagemathを使用して)返しますもっとうまくいった – Flavius

答えて

0

これは非常に非効率的なやり方ですが、始めるのに役立ちます。

a = dict([(734242, [1, 0, 1]), (734243, [0, 0, 1]), (734244, [0, 0, 
0]), (734245, [3, 0, 1]), (734246, [0, 0, 0]), (734247, [0, 0, 0]), 
(734248, [0, 0, 0]), (734249, [0, 0, 0]), (734250, [0, 0, 0]), (734251, 
[0, 0, 0]), (734252, [0, 0, 0]), (734253, [0, 0, 0]), (734254, [0, 0, 
0]), (734255, [0, 0, 0]), (734256, [0, 0, 0]), (734257, [0, 0, 0]), 
(734258, [0, 0, 0]), (734259, [1, 0, 0]), (734260, [0, 0, 0]), (734261, 
[0, 0, 0]), (734262, [0, 0, 0]), (734263, [0, 0, 0]), (734264, [0, 0, 
0]), (734265, [0, 0, 0]), (734266, [0, 0, 0]), (734267, [0, 0, 0]), 
(734268, [0, 0, 0]), (734269, [0, 0, 0]), (734270, [0, 0, 0]), (734271, 
[0, 0, 0]), (734272, [0, 0, 0]), (734273, [0, 0, 0]), (734274, [0, 0, 
0]), (734275, [0, 0, 0]), (734276, [0, 0, 0]), (734277, [0, 0, 0]), 
(734278, [0, 0, 0]), (734279, [0, 0, 0]), (734280, [0, 0, 0]), (734281, 
[0, 0, 0]), (734282, [0, 0, 0]), (734283, [0, 0, 0]), (734284, [0, 0, 
0]), (734285, [0, 0, 0]), (734286, [0, 0, 0]), (734287, [0, 0, 0]), 
(734288, [1, 0, 0])]) 


for b in a: 
    plt.bar(x=b, height=a[b][0], color='r') 
    plt.bar(x=b, height=a[b][1], bottom=a[b][0], color='b') 
    plt.bar(x=b, height=a[b][2], bottom=a[b][1], color='g') 

enter image description here

効率を向上させるために、あなたは配列に辞書を変換する必要があると思います。 x=height=、およびbottom=のすべてのパラメータは、引数として配列をとることができます。その後コードを3 plt.bar()コールに減らすことができます。