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()