900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > python 条形图 负值_使用python matplotlib获取正负值的堆积条形图

python 条形图 负值_使用python matplotlib获取正负值的堆积条形图

时间:2021-12-12 07:54:59

相关推荐

python 条形图 负值_使用python matplotlib获取正负值的堆积条形图

我正在尝试使用python Matplotlib绘制堆积的条形图,并且我要绘制正值和负值。我看过其他文章,谈论如何用正值和负值绘制堆积的条形图,但是没有一个使用Matplotlib完成,所以我找不到解决方案。

带有负JSON数据的堆积条形图

带有正负值的d3.js堆叠条形图

Highcharts垂直堆叠的条形图带有负值,这可能吗?

我已经使用此代码在带有matplotlib的python中绘制堆积的条形图:

1

2

3

4

5

6

7

8

9

10

11

12import numpy as np

import matplotlib.pyplot as plt

ind = np.arange(3)

a = np.array([4,-6,9])

b = np.array([2,7,1])

c = np.array([3,3,1])

d = np.array([4,0,-3])

p1 = plt.bar(ind, a, 1, color='g')

p2 = plt.bar(ind, b, 1, color='y',bottom=sum([a]))

p3 = plt.bar(ind, c, 1, color='b', bottom=sum([a, b]))

p4 = plt.bar(ind, d, 1, color='c', bottom=sum([a, b, c]))

plt.show()

上面的代码给出了下图:

这没有给我正确的结果。有人可以告诉我如何使用其他if语句或以其他方式在堆叠条形图中绘制负值和正值的方法进行编码。

我期望得到如下图所示的结果:

预期图表

现在,第一列已正确绘制,因为它具有所有正值,但是当python在第二列上工作时,由于负值,它会混合在一起。查看正值时如何获得正底,绘制其他负值时如何获得负底?

p1本身可以按照您想要的方式工作。 打印sum([a]),让我知道您是否要这样做? 还是您想要np.sum(a)? 还是所有图形重叠的问题? 然后查看subplot(...)命令。 也许您可以画出您想要的输出外观。

您的问题不是很清楚:结果是什么?

这似乎是一个重复的问题:/questions/36766245/

ax.bar或plt.bar中的bottom关键字允许精确设置每个bar光盘的下限。 我们对负值应用0负底,对正值应用0 pos底。

此代码示例创建所需的绘图:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37import numpy as np

import matplotlib.pyplot as plt

# Juwairia's data:

a = [4,-6,9]

b = [2,7,1]

c = [3,3,1]

d = [4,0,-3]

data = np.array([a, b, c, d])

data_shape = np.shape(data)

# Take negative and positive data apart and cumulate

def get_cumulated_array(data, **kwargs):

cum = data.clip(**kwargs)

cum = np.cumsum(cum, axis=0)

d = np.zeros(np.shape(data))

d[1:] = cum[:-1]

return d

cumulated_data = get_cumulated_array(data, min=0)

cumulated_data_neg = get_cumulated_array(data, max=0)

# Re-merge negative and positive data.

row_mask = (data<0)

cumulated_data[row_mask] = cumulated_data_neg[row_mask]

data_stack = cumulated_data

cols = ["g","y","b","c"]

fig = plt.figure()

ax = plt.subplot(111)

for i in np.arange(0, data_shape[0]):

ax.bar(np.arange(data_shape[1]), data[i], bottom=data_stack[i], color=cols[i],)

plt.show()

这是结果图:

这应该是plt.bar()的本机功能的一部分!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。