用matplotlib实现条形图中的反射点

2024-05-20 08:36:12 发布

您现在位置:Python中文网/ 问答频道 /正文

长期潜伏的编程问题,第一次海报。你知道吗

我正在写一些代码,在这里我正在做一个由一堆值组成的条形图,其中一些是负数,一些是正数-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:incompatible size:argument'height'must be length 99 or scalar”。我不太清楚如何解决这个问题,或者事实上是否有比我所想的更简单的方法来进行这种反射。你知道吗

感谢任何反馈-谢谢!你知道吗


Tags: 方法importbinmoreasnppltmin
2条回答

每次调用plt.bar,如果第一个参数是长度n的数组(横坐标集),那么第二个参数必须是长度n的数组(纵坐标集)。你知道吗

在您的例子中,您的横坐标集是由长度为99的数组构成的,因此您必须确保您的纵坐标集具有相同的形状。你知道吗

对于第一个调用,第二个参数clipped_levels的长度似乎合适,但是对于第二个调用,第二个参数是reflect,它远没有99个项目长。你知道吗

解决这个问题,它应该工作,希望!你知道吗

编辑:

reverse = np.concatenate([clipped_levels[:n_bins/2], clipped_levels[n_bins/2-2::-1]])这样的东西应该会起作用。你知道吗

另外,我仍然认为可以用一条指令(初始化all_clipped_values)替换for循环,除非其中有其他与此无关的代码。你知道吗

正如我在评论中提到的,也许这会澄清问题

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

必须指定负阶跃。你知道吗

相关问题 更多 >