繁体   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