柱状堆叠图
import matplotlib.pyplot as plt import numpy as np days = [1,2,3,4,5] sleeping = np.array([7,8,6,11,7]) eating = np.array([2,3,4,3,2]) working = np.array([7,8,7,2,2]) playing = np.array([8,5,7,8,13]) plt.bar(days,sleeping,color=\'m\',label=\'Sleeping\') plt.bar(days,eating,bottom=sleeping,color=\'c\',label=\'Eating\') plt.bar(days,working,bottom=sleeping+eating,color=\'r\',label=\'Working\') plt.bar(days,playing,bottom=sleeping+eating+working,color=\'y\',label=\'Playing\') plt.xlabel(\'x\')
https://wizardforcel.gitbooks.io/matplotlib-intro-tut/matplotlib/5.html
原文:Stack Plots with Matplotlib
译者:飞龙
在这篇 Matplotlib 数据可视化教程中,我们要介绍如何创建堆叠图。 堆叠图用于显示『部分对整体』随时间的关系。 堆叠图基本上类似于饼图,只是随时间而变化。
让我们考虑一个情况,我们一天有 24 小时,我们想看看我们如何花费时间。 我们将我们的活动分为:睡觉,吃饭,工作和玩耍。
我们假设我们要在 5 天的时间内跟踪它,因此我们的初始数据将如下所示:
import matplotlib.pyplot as plt
days = [1,2,3,4,5]
sleeping = [7,8,6,11,7]
eating = [2,3,4,3,2]
working = [7,8,7,2,2]
playing = [8,5,7,8,13]
因此,我们的x轴将包括day变量,即 1, 2, 3, 4 和 5。然后,日期的各个成分保存在它们各自的活动中。 像这样绘制它们:
plt.stackplot(days, sleeping,eating,working,playing, colors=[\'m\',\'c\',\'r\',\'k\'])
plt.xlabel(\'x\')
plt.ylabel(\'y\')
plt.title(\'Interesting Graph\nCheck it out\')
plt.show()
在这里,我们可以至少在颜色上看到,我们如何花费我们的时间。 问题是,如果不回头看代码,我们不知道什么颜色是什么。 下一个问题是,对于多边形来说,我们实际上不能为数据添加『标签』。 因此,在任何不止是线条,带有像这样的填充或堆叠图的地方,我们不能以固有方式标记出特定的部分。 这不应该阻止程序员。 我们可以解决这个问题:
import matplotlib.pyplot as plt
days = [1,2,3,4,5]
sleeping = [7,8,6,11,7]
eating = [2,3,4,3,2]
working = [7,8,7,2,2]
playing = [8,5,7,8,13]
plt.plot([],[],color=\'m\', label=\'Sleeping\', linewidth=5)
plt.plot([],[],color=\'c\', label=\'Eating\', linewidth=5)
plt.plot([],[],color=\'r\', label=\'Working\', linewidth=5)
plt.plot([],[],color=\'k\', label=\'Playing\', linewidth=5)
plt.stackplot(days, sleeping,eating,working,playing, colors=[\'m\',\'c\',\'r\',\'k\'])
plt.xlabel(\'x\')
plt.ylabel(\'y\')
plt.title(\'Interesting Graph\nCheck it out\')
plt.legend()
plt.show()
我们在这里做的是画一些空行,给予它们符合我们的堆叠图的相同颜色,和正确标签。 我们还使它们线宽为 5,使线条在图例中显得较宽。 现在,我们可以很容易地看到,我们如何花费我们的时间。