1

データの説明: 私がテストしているプログラムには、全体としてプログラムの機能を追加する 3 つの部分があります。たとえば、part1 はデータの 60% で機能し、part2 は追加の 10% で機能し、part3 はさらに 6% で機能します。

私がやりたいのは、「プログラムが処理したデータの合計量のうち、緑はpart1が処理した量、赤がpart2、黄色がpart3」を示す積み上げバーです。

5 つのファイルの 3 つのセットでプログラムをテストしたので、各データセットの 5 つの棒グラフをグループ化してグラフにこれを反映させたいので、最終的にグラフには 3 つの部分があり、それぞれが 1 インチ離れています。 barchart には、上記の積み上げ効果があります。

Y 軸はファイルが機能したパーセンテージ、Y 軸はファイルが属するグループの名前になることを目指しています。

いくつかのサンプルデータについては、これは私が試してきたものです:

meta_part1 = [5, 5.5, 4.67, 6.54, 4.4]
meta_part2 = [3.1, 3.3, 3.9, 3.5, 3.1]
meta_part3 = [1.3,1.4,1.7,2.4,0.89]

trans_part1 = [90,89.5,94.67,96.54,94.4]
trans_part2 = [11.1,11.3,10.9,11.5,12.1]
trans_part3 = [11.3,11.4,11.7,12.4,10.89]

s_part1 = [55,55.5,54.67,56.54,54.4]
s_part2 = [11.1,11.3,10.9,11.5,12.1]
s_part3 = [11.3,11.4,11.7,12.4,10.89]

meta、trans、および s はすべてグループです。

これまでに失敗したコードは次のとおりです。

import matplotlib.pyplot as plt
import numpy as np
import numpy as np
from numpy.random import randn
import pandas as pd
from scipy import stats
import matplotlib as mpl
import seaborn as sns


meta_part1 = [5, 5.5, 4.67, 6.54, 4.4]
meta_part2 = [3.1, 3.3, 3.9, 3.5, 3.1]
meta_part3 = [1.3,1.4,1.7,2.4,0.89]

trans_part1 = [90,89.5,94.67,96.54,94.4]
trans_part2 = [11.1,11.3,10.9,11.5,12.1]
trans_part3 = [11.3,11.4,11.7,12.4,10.89]

s_part1 = [55,55.5,54.67,56.54,54.4]
s_part2 = [11.1,11.3,10.9,11.5,12.1]
s_part3 = [11.3,11.4,11.7,12.4,10.89]

N = 5

ind = np.arange(N)    # the x locations for the groups
width = 0.35       # the width of the bars: can also be len(x) sequence

p1 = plt.bar(ind, meta_part1,   width, color='y', bottom=meta_part2)
p2 = plt.bar(ind, meta_part2, width, color='r', bottom=meta_part3)
p3 = plt.bar(ind, meta_part3, width, color='g')



plt.ylabel('Scores')
plt.title('Difference between stitchers')
plt.xticks(ind+width/3., ('Test1', 'Test2', 'Test3', 'Test4', 'Test5') )
plt.yticks(np.arange(0,10,1))
plt.legend( (p1[0], p2[0], p3[0]), ('Part1', 'Part2', 'Part3') )
ax.autoscale(tight=True)

plt.show()

ただし、これは2つのスタック部分を持つバーしか生成せず、3番目が最初の部分にマージされているため、これは役に立たず、マージをこのコードに結合する方法を見つけることができませんでした.

4

1 に答える 1

1

meta_secondここのスニペットではandを定義していないmeta_totalので、何が起こっているのかを推測するのは少し難しいですが、突き刺します. +get を使用してリストを追加している可能性がありますmeta_total。これにより、値が加算されずに 2 つのリストが追加されます。

動作する変更は次のとおりです。

meta_second = meta_part1
meta_total = [meta_part1[i]+val for i, val in enumerate(meta_part2)]
p1 = plt.bar(ind, meta_part1, width, color='y')
p2 = plt.bar(ind, meta_part2, width, color='r', bottom=meta_second)
p3 = plt.bar(ind, meta_part3, width, color='g', bottom=meta_total)

また、関係ありませんが、ax定義される前に使用しようとします。いずれかのインターフェース (pyplot またはオブジェクト指向インターフェース) に固執するようにしてください。彼らは混合されるのが好きではありません。個人的には、OO インターフェースの方が堅牢で信頼性が高く、常にそれを使用しています。

于 2014-09-04T16:01:18.007 に答える