簡體   English   中英

使用matplotlib在條形圖中反映點

[英]Reflecting points in a bar graph using matplotlib

長時間潛伏編程問題,第一次海報。

我正在寫一些代碼,我正在制作一堆值的條形圖,其中一些是負數,其中一些是正數 - 這里情節

簡而言之,我想要做的是獲取綠色部分的所有負值並將它們疊加到正面,這樣您就可以看到這些值的不對稱性。 我已經嘗試了一些方法來實現這一點,也許我沒有找到正確的東西,但似乎無法找到一個如何做到這一點的好答案。

到目前為止我所擁有的相關代碼(希望不會留下任何對於情節目的而言重要的東西......):

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:不兼容的大小:參數'高度'必須是長度99或標量。” 我不太清楚如何解決這個問題,或者事實上,如果有一種比我想的更簡單的方法來做這種反思。

任何反饋意見 - 謝謝!

正如我在評論中提到的,也許這會澄清

>>> 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]

您必須指定否定步驟。

每次調用plt.bar ,如果你的第一個參數是長度為n的數組( plt.bar的集合),那么你的第二個參數必須是長度為n的數組(縱坐標數組)。

在您的情況下,您的橫坐標是構造一個長度為99的數組,因此您必須確保您的縱坐標具有相同的形狀。

對於第一個調用,你的第二個參數clipped_levels似乎具有正確的長度,但對於第二個調用,第二個參數是reflect - 這遠遠超過99個項目。

修復它,它應該工作,希望!

編輯:

reverse = np.concatenate([clipped_levels[:n_bins/2], clipped_levels[n_bins/2-2::-1]])這樣的東西應該可以解決問題。

此外,我仍然認為你的for循環可以被單個指令( all_clipped_values的初始化) all_clipped_values ,除非里面有一些其他代碼與此無關。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM