簡體   English   中英

堆積條形圖使用python matplotlib正面和負面值

[英]Stacked bar charts using python matplotlib for positive and negative values

我試圖用python Matplotlib繪制一個堆積的條形圖,我有正負值,我想繪制。 我已經看過其他帖子,談論如何繪制帶有正值和負值的疊加條形圖,但是他們都沒有使用Matplotlib完成它,所以我找不到我的解決方案。 具有負JSON數據的 堆積條形圖d3.js具有正值和負值的 堆積條形圖具有負值的Highcharts垂直堆積條形圖,是否可能?

我使用此代碼在matthon中使用matplotlib繪制堆積條形圖:

import 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 else語句或任何其他方式可以在堆積條形圖中繪制負值和正值。

我期望得到如下圖表中的結果: 預期圖表

現在第一列被正確繪制,因為它具有所有正值,但是當python在第二列上工作時,由於負值,它會全部混淆。 在繪制其他負值時,如何在查看正值和負底值時獲取正底部?

ax.bar或plt.bar中的bottom關鍵字允許精確設置每個條形盤的下限。 我們將0-neg底部應用於負值,將0-pos底部應用於正值。

此代碼示例創建所需的繪圖:

import 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()

這是結果圖:

Matplotlib中帶有pos / neg值的堆積條形圖

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM