簡體   English   中英

如何使用matplotlib制作包含多個數據的條形圖

[英]How to make a barchart with multiple datas using matplotlib

我正在嘗試使用 matplotlib 在 python 上制作條形圖,但即使我知道我想要做的事情很簡單,我也很掙扎。

我有相同長度的不同變量,想象一下 4 個列表:

run1 = [250,250,250,250]
run2 = [100,100,400,400]
run3 = [50,250,550,150]
run4 = [300,200,100,400]

而我想要的只是一個帶有 4*4 條形的圖形。 我想對每個列表的第一個元素(這里是 250,100,50,300)進行分組,並有四個不同顏色的條,其高度對應於 y 軸上的值。 然后放一個空格,再有 4 個帶有下一個值 (250,100,250,200) 的柱,依此類推。

我怎樣才能做到這一點 ?

謝謝你。

我想最好的方法是將您的數據列表轉換為 Pandas DataFrame 並繪制:

import matplotlib.pyplot as plt
import pandas as pd

run1 = [250,250,250,250]
run2 = [100,100,400,400]
run3 = [50,250,550,150]
run4 = [300,200,100,400]

runs = pd.DataFrame({'Run 1': run1, 'Run 2': run2,
 'Run 3': run3, 'Run 4': run4})
runs.plot.bar()
plt.show()

在此處輸入圖片說明

這是一種方法。 首先將所有四個列表合並在一起,以利用 NumPy 索引從每個列表中獲取一個元素。

這里控制條形透明度的alpha參數很重要,因為如果您使用不透明條形alpha=1那么您將只看到最高的條形,因為其他條形將隱藏在它后面。 我使用了alpha=0.2 您可以使用任何您喜歡的值。

import numpy as np
import matplotlib.pyplot as plt

run1 = [250,250,250,250]
run2 = [100,100,400,400]
run3 = [50,250,550,150]
run4 = [300,200,100,400]

run_all = np.stack((run1, run2, run3, run4))

for i in range(len(run_all)):
    plt.bar(range(4), run_all[i, :], alpha=0.2)

在此處輸入圖片說明

暫無
暫無

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

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