fill_between只填充两个x值,而不是填充整个散点图,matplotlib

时间:2017-05-01 15:24:34

标签: python matplotlib

我想在我的散点图上填充两行之间。这是为了显示散点图平均值附近的标准偏差。

import matplotlib.pyplot as plt
import numpy as np

y1 # is the first set of y-axis data
y2 # is the second set of y-axis data
y3 # is the third set of y-axis data
x # is the x-axis data set

ym1 = np.mean(y1)
ym2 = np.mean(y2)
ym3 = np.mean(y3)
# To set up the means of the three data series

sigma1 = np.std(y1)
sigma2 = np.std(y2)
sigma3 = np.std(y3)
# To set up the standard deviations

ysupper1 = ym1 + sigma1
ysupper2 = ym2 + sigma2
ysupper3 = ym3 + sigma3
yslower1 = ym1 - sigma1
yslower2 = ym2 - sigma2
yslower3 = ym3 - sigma3
# To set up the higher and lower limits to fill between

yma1 = np.array([ym1])
yma2 = np.array([ym2])
yma3 = np.array([ym3])
# To set up values to put into a plt.axhline

设置完成后,我会针对x创建y1,y2和y3的图形,此处不会出现任何问题。然后我设置plt.axhlineplt.fill_between

plt.axhline(yma1, linestyle='--', color='b', alpha=0.7),
plt.axhline(yma2, linestyle='--', color='r', alpha=0.7),
plt.axhline(yma3, linestyle='--', color='c', alpha=0.7),
# To create the 'mean value' lines on the graph

plt.fill_between(x, ysupper1, yslower1, color='b', alpha=0.3),
plt.fill_between(x, ysupper2, yslower2, color='r', alpha=0.3),
plt.fill_between(x, ysupper3, yslower3, color='c', alpha=0.3),
# To fill in between the upper and lower limits of the standard deviation

但是,此创建的图表始终只在沿x轴的两个点之间填充。我已尝试手动将where中的plt.fill_between参数说明为None,而我预计没有任何更改。我不知道为什么它们只是填充在这些看似沿x轴的任意点之间。这里参考的是我得到的图表的图像:

Image of graph that I am getting

编辑:找到的答案一如既往,因为无法准确理解函数的工作原理。

1 个答案:

答案 0 :(得分:0)

好的,我发现的问题是由于我没有提及的部分代码,因为我认为没有必要。我使用if (isLargeGroupTwo == true) { Console.WriteLine("Please reroll to try and get a 3, 4, or 5 of a kind"); if (myDie[0].getNumberOnTop() == myDie[1].getNumberOnTop()) { for(int i = 2; i < 6; i++) myDie[i].roll(); 函数来帮助对我访问的大量文件进行排序,以提取我需要的数据。虽然这对于使用np.fill_between函数时的正常绘图很好,但glob.glob数组只是使用数组中的第一个和最后一个值来设置范围。这就是我得到一个奇怪的填充范围的原因。当我使用x按升序对np.sort进行排序时,在x中使用了这个新数组,然后就可以了。抱歉杂乱无章。