我有三個串列:x、y 和 w,如圖所示:x 是物件的名稱。y 是它的高度,w 是它的寬度。
x = ["A","B","C","D","E","F","G","H"]
y = [-25, -10, 5, 10, 30, 40, 50, 60]
w = [30, 20, 25, 40, 20, 40, 40, 30]
我想在 Python 的條形圖中繪制這些值,這樣 y 代表高度,w 代表條形的寬度。
當我繪制它使用
colors = ["yellow","limegreen","green","blue","red","brown","grey","black"]
plt.bar(x, height = y, width = w, color = colors, alpha = 0.8)
我得到一個如圖所示的情節:

接下來,我嘗試標準化寬度,以便使用條形圖不會相互重疊
w_new = [i/max(w) for i in w]
plt.bar(x, height = y, width = w_new, color = colors, alpha = 0.8)
#plt.axvline(x = ?)
plt.xlim((-0.5, 7.5))
如圖所示,我得到了比以前更好的結果:

但是,條形之間的間隙仍然不均勻。比如B和C之間,差距很大。但F和G之間,沒有差距。
我想要在兩個連續條之間有均勻間隙寬度或沒有間隙的圖。它看起來應該如圖所示:
如何在 Python 中創建這種型別的圖?是否可以使用任何資料可視化庫,例如 matplotlib、seaborn 或 Plotly?如果資料在資料框中可用,是否還有其他選擇?
此外,我想在圖的右側添加 A、B、C 等的標簽,而是將條的實際寬度作為 x 軸上的標簽(例如,在 x-上面的軸圖)。我還想在距離 x 軸 50 處添加一條垂直紅線。我知道這可以使用添加plt.axvline(x = ...)但我不確定我應該宣告為 x 的值是多少,因為 W 的比例與 x 軸的長度不準確。
uj5u.com熱心網友回復:
IIUC,你可以試試這樣的:
import matplotlib.pyplot as plt
x = ["A","B","C","D","E","F","G","H"]
y = [-25, -10, 5, 10, 30, 40, 50, 60]
w = [30, 20, 25, 40, 20, 40, 40, 30]
colors = ["yellow","limegreen","green","blue","red","brown","grey","black"]
#plt.bar(x, height = y, width = w, color = colors, alpha = 0.8)
xticks=[]
for n, c in enumerate(w):
xticks.append(sum(w[:n]) w[n]/2)
w_new = [i/max(w) for i in w]
a = plt.bar(xticks, height = y, width = w, color = colors, alpha = 0.8)
_ = plt.xticks(xticks, x)
plt.legend(a.patches, x)
輸出:

或更改條形寬度的 xticklabels:
xticks=[]
for n, c in enumerate(w):
xticks.append(sum(w[:n]) w[n]/2)
w_new = [i/max(w) for i in w]
a = plt.bar(xticks, height = y, width = w, color = colors, alpha = 0.8)
_ = plt.xticks(xticks, w)
plt.legend(a.patches, x)
輸出:

uj5u.com熱心網友回復:
我想出了另一種方法來做到這一點。
x = ["A","B","C","D","E","F","G","H"]
y = [-25, -10, 5, 10, 30, 40, 50, 60]
w = [30, 20, 25, 40, 20, 40, 40, 30]
xpos = []
a = 0
for i in range(len(w)):
if i == 0:
a =w[i]
xpos.append(w[i]/2)
else:
a = w[i]
xpos.append(a - w[i]/2)
colors = ["yellow","limegreen","green","blue","red","brown","grey","black"]
fig = plt.bar(xpos,
height = y,
width = w,
color = colors,
alpha = 0.5,
)
plt.xticks(ticks = xpos, labels = w)
plt.xlim((0, 245))
plt.axvline(x = 150)
plt.legend(fig.patches, x)
plt.show()

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/392632.html
標籤:Python 蟒蛇-3.x 熊猫 matplotlib 海生
