2017-03-10 11 views
2

私は、matplotlibを使ってプロットしたいプレビニングされたデータを含む別のコードから一連のファイル出力を得ました。これらのファイルのいずれかから正しいx軸ラベル付きのプリビーン付きデータをプロットする

内容の簡単な例は次のようになります。

hist_file[0]は、データのシミュレーションで対応するダンプ時間への参照である、 hist_file[-2]は全体の下限である
hist_file=[ 0.00000000e+00, 1.52915100e+24, 0.00000000e+00, 
      0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 
      0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 
      0.00000000e+00, 2.03886800e+24, 0.00000000e+00, 
      0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 
      0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 
      0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 
      0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 
      0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 
      0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 
      0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 
      0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 
      0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 
      0.00000000e+00, 5.09717100e+23, 0.00000000e+00, 
      1.00000000e+00] 

データはhist_file[-1]です。 (したがって、このデータセットでは、ダンプは0、データセットの下限は0、上限は1です)。 hist_file[1:-2]は、私が視覚化しようとしているビニングされたデータです。 I(下記のコードのチャンクを参照)のデータをプロットすることができbarを使用

import matplotlib.pyplot as plt 

hist_data=hist_file[1:-2] 
plt.bar(range(0,len(hist_data)), hist_data) 

しかし、xticksは、データの実際のビン値(区間[0,1])に対応していません。これは、次の図

See figure 1.

に示されている私は仕事だろうと思ったことは、次のようなものになるだろう:

import numpy as np 
hist_interval=np.linspace(hist_file[-2], hist_file[-1],len(hist_data)) 
plt.bar(hist_interval, hist_data) 

をしかし、これは明らかに適切ではない以下のようなバープロットを作成します。

so

さらに私はlen(hist_data)ビンを持っていながら、ビンのエッジが、私は彼らの異なるサイズのために解決することが全くできなかったlen(hist_data)+1だろうと認識しています。同様に私はplt.set_xaxisticksを使って試してみましたが、どちらも進んでいません。

したがって、すべてのすべてで任意のヘルプは素晴らしいおかげで次のようになります。まさにあなたが問題を抱えているところD

答えて

1

は、私は完全にわからないんだけど、次はあなたのデータをプロットできる方法の一例だろう。

import matplotlib.pyplot as plt 
import numpy as np; np.random.seed(13) 

xmin = 0 # minimum value (left edge of first bin) 
xmax = 1 # maximum value (right edge of last bin) 
N = 4 # number of values (bins) 
# data 
data = np.random.rand(N) 
# coordinates of left bin edge: 
x = np.arange(0,N)*(xmax-xmin)/float(N) 
# bar width 
width=(xmax-xmin)/float(N) 

plt.bar(x, data, width=width, align="edge", edgecolor="k") 
#set x ticks to bin edges 
plt.xticks(list(x)+[xmax]) 
plt.show() 

enter image description here

そしてここxmax = 100と15バールと同じ例です。

import matplotlib.pyplot as plt 
import numpy as np; np.random.seed(13) 

xmin = 0 # minimum value (left edge of first bin) 
xmax = 100 # maximum value (right edge of last bin) 
N = 15 # number of values (bins) 
# data 
data = np.random.rand(N) 
# coordinates of left bin edge: 
x = np.arange(0,N)*(xmax-xmin)/float(N) 
# bar width 
width=(xmax-xmin)/float(N) 

plt.bar(x, data, width=width, align="edge", edgecolor="k") 
#set x ticks to bin edges 
plt.xticks((list(x)+[xmax])[::3], rotation =45) 
plt.show() 

enter image description here

+0

こんにちは、答えてくれてありがとう(と、元の数字を整理役職)。 私はあなたの例を試してみましたが、それもうまくいきませんでしたが、新しいノートブックに入れた場合、初めてデータを使用したときと同じように動作しました。私は奇妙なことは何も起こっていないので、なぜ元のノートブックが問題を抱えていたのか分かりませんが、実際のソリューションに感謝します。 – Matthew

+0

これがあなたの質問に答えるなら、[accepting](https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)と考えてください。そうでない場合は、追加の問題について詳しくお聞かせください。 – ImportanceOfBeingErnest

+0

こんにちは、申し訳ありませんが、別のデータセットを試してみると、これは[0,1]の間だけうまく動作するようです。たとえば、最後のビンの右端が100の場合、結果の図形は、左側に一連の重なり合う棒です。 – Matthew

関連する問題