我怎样才能用matplotlib创build堆积线图?

我希望能够用Python(最好使用matplotlib,但另一个库也可以)生成一个堆栈线图(类似于这里使用的方法)。 我怎样才能做到这一点?

这与他们网站上的堆叠条形图示例类似,除了我想要将条形顶部连接到线段以及要填充的下面区域之外。 我可能会通过减less酒吧之间的差距,并使用大量的酒吧(但这似乎是一个黑客,除此之外,我不知道是否有可能)近似。

我相信Area Plot是这种types的情节的一个通用术语,在OP, Stacked Area Plot中列举的具体情况。

Matplotlib没有“开箱即用”的function,结合了数据处理和绘图/渲染步骤来创build这种types的绘图,但很容易从Matplotlib和NumPy提供的组件中自行推出。

下面的代码首先将数据堆栈 ,然后绘制该图。

 import numpy as NP from matplotlib import pyplot as PLT # just create some random data fnx = lambda : NP.random.randint(3, 10, 10) y = NP.row_stack((fnx(), fnx(), fnx())) # this call to 'cumsum' (cumulative sum), passing in your y data, # is necessary to avoid having to manually order the datasets x = NP.arange(10) y_stack = NP.cumsum(y, axis=0) # a 3x10 array fig = PLT.figure() ax1 = fig.add_subplot(111) ax1.fill_between(x, 0, y_stack[0,:], facecolor="#CC6666", alpha=.7) ax1.fill_between(x, y_stack[0,:], y_stack[1,:], facecolor="#1DACD6", alpha=.7) ax1.fill_between(x, y_stack[1,:], y_stack[2,:], facecolor="#6E5160") PLT.show() 

堆积面积示例

较新版本的matplotlib包含函数plt.stackplot ,它允许几个不同的“开箱即用”叠加区域图:

 import numpy as np import pylab as plt X = np.arange(0, 10, 1) Y = X + 5 * np.random.random((5, X.size)) baseline = ["zero", "sym", "wiggle", "weighted_wiggle"] for n, v in enumerate(baseline): plt.subplot(2 ,2, n + 1) plt.stackplot(X, *Y, baseline=v) plt.title(v) plt.axis('tight') plt.show() 

堆栈使用plt.stackplot绘图。

稍微less一些的方法是首先使用折线图,然后使用matplotlib.pyplot.fill_between 。 要模拟堆叠,您必须自己移动点。

 x = np.arange(0,4) y1 = np.array([1,2,4,3]) y2 = np.array([5,2,1,3]) # y2 should go on top, so shift them up y2s = y1+y2 plot(x,y1) plot(x,y2s) fill_between(x,y1,0,color='blue') fill_between(x,y1,y2s,color='red') 

如果你有一个数据框,这很容易:

 df = pd.DataFrame(np.random.rand(10, 4), columns=['a', 'b', 'c', 'd']) df.plot.area(); 

在这里输入图像说明

来自: pandas文档