我想知道如何在matplotlib中创建100%堆积面积图。在matplotlib页面上,我找不到它的例子。
有人可以告诉我如何实现这一目标吗?
答案 0 :(得分:18)
实现这一目标的一个简单方法是确保对于每个x值,y值总和为100.
我假设您在数组中组织了y值,如下例所示,即
y = np.array([[17, 19, 5, 16, 22, 20, 9, 31, 39, 8],
[46, 18, 37, 27, 29, 6, 5, 23, 22, 5],
[15, 46, 33, 36, 11, 13, 39, 17, 49, 17]])
要确保列总数为100,您必须将y
数组除以其列总和,然后乘以100.这使得y值跨越0到100,使得“单位” “y轴百分比。如果您希望y轴的值跨越从0到1的间隔,请不要乘以100.
即使您没有如上所述在一个数组中组织y值,原理也是一样的;每个数组中由y值组成的相应元素(例如y1
,y2
等)应总和为100(或1)。
以下代码是评论中链接的example @LogicalKnight的修改版本。
import numpy as np
from matplotlib import pyplot as plt
fnx = lambda : np.random.randint(5, 50, 10)
y = np.row_stack((fnx(), fnx(), fnx()))
x = np.arange(10)
# Make new array consisting of fractions of column-totals,
# using .astype(float) to avoid integer division
percent = y / y.sum(axis=0).astype(float) * 100
fig = plt.figure()
ax = fig.add_subplot(111)
ax.stackplot(x, percent)
ax.set_title('100 % stacked area chart')
ax.set_ylabel('Percent (%)')
ax.margins(0, 0) # Set margins to avoid "whitespace"
plt.show()
这给出了如下所示的输出。