2016-08-23 3 views
3

プログラミングの質問のための長い時間の犯人、初めてのポスター。matplotlibを使用した棒グラフでの点の反映

私は否定しているそのうちのいくつかの値、の束のバーグラフを作っていますいくつかのコードを書いていますし、そのうちのいくつかは、私はすべて取るされて何をしたいのか、要するにplot here

ポジティブです緑の部分の負の値をプラス側にオーバーレイするので、それらの値の非対称性を見ることができます。私はこれを動作させるためにいくつかの方法を試しましたが、おそらく私は正しいことを探しているわけではありませんが、これをどうやって良い答えを見つけることはできないようです。

私がこれまで(つまり、プロットの目的のために重要だからうまくいけば、何かを残していない...)している、関連するコード:私はこの方法をしようとすると、しかし、私が得る問題

import glob 
import pyrap.images as pim 
import numpy as np 
import matplotlib.pyplot as plt 
from scipy.stats import norm 
import matplotlib.mlab as mlab 
from scipy.optimize import * 

less_than_expected_min = -500 
more_than_expected_max = 1200 
n_bins = 100 

bin_edges = np.linspace(less_than_expected_min, more_than_expected_max, n_bins) 
for i in range(total): 
    all_clipped_values = np.zeros([total,n_bins-1]) 

clipped_levels= np.sum(all_clipped_values,axis=0) 

reflect= np.concatenate([clipped_levels[0:30], clipped_levels[30:0]]) 


plt.bar(bin_edges[:-1],clipped_levels,width=(more_than_expected_max -less_than_expected_min)/float(n_bins), log=True,color='green') 
plt.bar(bin_edges[:-1],reflect,width=(more_than_expected_max -less_than_expected_min)/float(n_bins), log=True,color='red') 
ある

"AssertionError:互換性のないサイズ:引数 'height'は長さ99またはスカラーでなければなりません。"これをどのように解決するか、実際に私が思っているものよりもこのリフレクションを行う簡単な方法があるかどうかは、私には分かりません。

フィードバックいただきありがとうございます!

+0

このエラーはどの回線で発生しましたか? –

+0

私は '' clipped_levels [30:0] ''で '' clipped_levels [30:0:-1] ''のように負のステップサイズをとらなければならないと思っています –

+0

あなたの問題に関与しているかどうか分かりませんしかし私は 'for i in range ... '部分を理解していません:各繰り返しで' all_clipped_values'に同じ値を割り当てます... – Daneel

答えて

1

私は私のコメントで述べたように、多分これはあなたが負のステップを指定する必要が

>>> x = list(range(100)) 
>>> x[0:30] 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29] 
>>> x[30:0] 
[] 
>>> x[30:0:-1] 
[30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1] 

を明確にします。

0

あなたがplt.barを呼び出すたびに、あなたの最初の引数は、あなたの2番目の引数が長N(縦セット)の配列である必要があり、長さnは(横軸のセット)の配列である場合。

あなたの場合、横座標は長さ99の配列で構成されているため、縦座標のセットが同じ形状であることを確認する必要があります。

最初の呼び出しでは、2番目の引数clipped_levelsは正しい長さに見えますが、2番目の呼び出しでは2番目の引数はreflectです。これは99個の項目から遠く離れています。

修正してうまくいくはずです!

EDIT:reverse = np.concatenate([clipped_levels[:n_bins/2], clipped_levels[n_bins/2-2::-1]])よう

何かがトリックを行う必要があります。

また、あなたのforループは、ここでは関係のないいくつかの他のコードがない限り、ループは単一の命令(all_clipped_valuesの初期化)に置き換えることができると思います。

+1

これは助けになりました。プロット内の緑色のセクション全体が、負の部分ではなく、最終的に正しい答えになります。ありがとう!私はまた覚えておく必要があります。関連していないので、私が入れなかったforループには他のことがあります。 – kb3hts

関連する問題