如何绘制包含大量数据点的阴影区域的包络线?
How to draw enveloping line with a shaded area which incorporates a large number of data points?
对于上图,我想画一个带阴影区域的封闭线,如下所示:
各位高手,有什么高招吗?
复制您的示例很容易,因为可以计算每个 x
的最小值和最大值并在它们之间填充。例如
import matplotlib.pyplot as plt
import numpy as np
#dummy data
y = [range(20) + 3 * i for i in np.random.randn(3, 20)]
x = list(range(20))
#calculate the min and max series for each x
min_ser = [min(i) for i in np.transpose(y)]
max_ser = [max(i) for i in np.transpose(y)]
#initial plot
fig, axs = plt.subplots()
axs.plot(x, x)
for s in y:
axs.scatter(x, s)
#plot the min and max series over the top
axs.fill_between(x, min_ser, max_ser, alpha=0.2)
给予
对于您显示的数据,这可能会证明存在问题,因为该系列并非在所有情况下都共享 x
值。如果是这种情况,那么您需要一些统计技术来以某种方式平滑该系列。一种选择是使用像 seaborn
, which provides functions 这样的包来为您处理所有细节。
对于上图,我想画一个带阴影区域的封闭线,如下所示:
各位高手,有什么高招吗?
复制您的示例很容易,因为可以计算每个 x
的最小值和最大值并在它们之间填充。例如
import matplotlib.pyplot as plt
import numpy as np
#dummy data
y = [range(20) + 3 * i for i in np.random.randn(3, 20)]
x = list(range(20))
#calculate the min and max series for each x
min_ser = [min(i) for i in np.transpose(y)]
max_ser = [max(i) for i in np.transpose(y)]
#initial plot
fig, axs = plt.subplots()
axs.plot(x, x)
for s in y:
axs.scatter(x, s)
#plot the min and max series over the top
axs.fill_between(x, min_ser, max_ser, alpha=0.2)
给予
对于您显示的数据,这可能会证明存在问题,因为该系列并非在所有情况下都共享 x
值。如果是这种情况,那么您需要一些统计技术来以某种方式平滑该系列。一种选择是使用像 seaborn
, which provides functions 这样的包来为您处理所有细节。