Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用';其中';使用matplotlib打印时。为什么它会跳过绘制数据点?_Python_Matplotlib_Graph - Fatal编程技术网

Python 使用';其中';使用matplotlib打印时。为什么它会跳过绘制数据点?

Python 使用';其中';使用matplotlib打印时。为什么它会跳过绘制数据点?,python,matplotlib,graph,Python,Matplotlib,Graph,我正在绘制一组数据的最小值和最大值,围绕平均值绘制,用绿色实线显示。红线是一个阈值,我想让大家特别注意数据穿过这条线的位置 axis[1]。在(x,数据[minvalues],数据[maxvalues],alpha=0.3,插值=False,其中=data[maxvalues]=threshold,color='red',edgecolor='none',step=“post”)之间填充_ 对于行内数据[maxvalues],fill\u-between方法不会在where参数中的True和Fa

我正在绘制一组数据的最小值和最大值,围绕平均值绘制,用绿色实线显示。红线是一个阈值,我想让大家特别注意数据穿过这条线的位置

axis[1]。在(x,数据[minvalues],数据[maxvalues],alpha=0.3,插值=False,其中=data[maxvalues]=threshold,color='red',edgecolor='none',step=“post”)之间填充_

对于行内数据[maxvalues],
fill\u-between
方法不会在
where
参数中的
True
False
之间的转换处绘制条形图

见:

定义从何处排除要填充的某些水平区域。填充区域由坐标x[其中]定义。更准确地说,如果其中[i]和其中[i+1],则在x[i]和x[i+1]之间填充。请注意,此定义意味着where中两个假值之间的独立真值不会导致填充。由于相邻的假值,真实位置的两侧保持未填充状态

您可以添加一个方法来为
where
参数生成额外的
True
值。在下面的示例中,我不得不对您的数据做一些假设,但是
gapfill
函数对我假设的数据有效

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd


def gapfill(bool_array):
    normal = list(bool_array)
    shifted = [False] + normal[:-1]
    return np.array([x or shifted[n] for n, x in enumerate(normal)])


threshold = 3
data = pd.DataFrame({
    'maxvalues': [14, 15,  1, 2,  1, 2,  1, 2,  1, 2, 14, 15,  1, 2,  1, 2,  1, 2, 14, 15,  1, 2],
    'minvalues': [ 0,  0, -1, 0, -1, 0, -1, 0, -1, 0,  0,  0, -1, 0, -1, 0, -1, 0,  0,  0, -1, 0],
})
maxvalues = 'maxvalues'
minvalues = 'minvalues'
x = np.arange(len(data[maxvalues]))
fig, axis = plt.subplots(2)

axis[1].fill_between(x, data[minvalues], data[maxvalues], alpha=0.3, interpolate=False, where=gapfill(data[maxvalues] < threshold), color='green', edgecolor='none', step="post")
axis[1].fill_between(x, data[minvalues], data[maxvalues], alpha=0.3, interpolate=False, where=gapfill(data[maxvalues] >= threshold), color='red', edgecolor='none', step="post")
for line in data[maxvalues] <= threshold:
    print(line)

plt.show()
导入matplotlib.pyplot作为plt
将numpy作为np导入
作为pd进口熊猫
def gapfill(布尔_阵列):
正常=列表(布尔_数组)
移位=[假]+正常[:-1]
返回np.数组([x或移位[n]表示n,枚举中的x(正常)])
阈值=3
data=pd.DataFrame({
“最大值”:[14,15,1,2,1,2,1,2,1,1,2,14,15,1,2,1,1,2,1,2,14,15,1,2],
“最小值”:[0,0,-1,0,-1,0,-1,0,0,0,0,0,-1,0,-1,0,-1,0,0,0,-1,0],
})
maxvalues='maxvalues'
minvalues='minvalues'
x=np.arange(len(数据[maxvalues]))
图,轴=plt子批次(2)
轴[1]。在(x,数据[minvalues],数据[maxvalues],alpha=0.3,插值=False,其中=gapfill(数据[maxvalues]=threshold),color='red',edgecolor='none',step='post')之间填充

对于行内数据[maxvalues],如果您可以包含一些最小的样本数据,这样我们就可以准确地知道变量是什么样子,即
数据
最小值
最大值
阈值
。这也让我们重现问题并测试解决方案。
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd


def gapfill(bool_array):
    normal = list(bool_array)
    shifted = [False] + normal[:-1]
    return np.array([x or shifted[n] for n, x in enumerate(normal)])


threshold = 3
data = pd.DataFrame({
    'maxvalues': [14, 15,  1, 2,  1, 2,  1, 2,  1, 2, 14, 15,  1, 2,  1, 2,  1, 2, 14, 15,  1, 2],
    'minvalues': [ 0,  0, -1, 0, -1, 0, -1, 0, -1, 0,  0,  0, -1, 0, -1, 0, -1, 0,  0,  0, -1, 0],
})
maxvalues = 'maxvalues'
minvalues = 'minvalues'
x = np.arange(len(data[maxvalues]))
fig, axis = plt.subplots(2)

axis[1].fill_between(x, data[minvalues], data[maxvalues], alpha=0.3, interpolate=False, where=gapfill(data[maxvalues] < threshold), color='green', edgecolor='none', step="post")
axis[1].fill_between(x, data[minvalues], data[maxvalues], alpha=0.3, interpolate=False, where=gapfill(data[maxvalues] >= threshold), color='red', edgecolor='none', step="post")
for line in data[maxvalues] <= threshold:
    print(line)

plt.show()