我正在使用以下代碼從資料幀 df1(x,y) 生成條形圖,如下所示。(為簡單起見,我在圖表代碼本身中添加了示例值)。
sns.barplot(x=['A','B','C','D','E','F','G'],y=[10,40,20,5,60,30,80],palette='Blues_r')
這會生成一個漂亮的圖表,其中藍色陰影按 A 到 G 的降序排列。
但是,我需要根據另一個資料幀 df2 確定的顏色順序,其中有針對 A 到 G 的值。我不希望在此圖表中更改 A 到 G 的順序,因此根據值對資料幀 df1 進行排序df2 對我不起作用。
所以,說 df2 是這樣的:
A 90
B 70
C 40
D 30
E 30
F 20
G 80
請注意 df2 可以具有相同的值(D 和 E),在這種情況下,我不關心 D 和 E 是否具有相同的顏色或與調色板相鄰。但不應該有任何其他顏色在 D 和 E 之間的條。也就是說,我需要圖表有從 A 開始到 G 結束的條(固定順序)。但是,顏色將按照 df2 值的順序排列。
我們如何做到這一點?
uj5u.com熱心網友回復:
你可以試試香草plt.bar:
x = ['A','B','C','D','E','F','G']
y=[10,40,20,5,60,30,80]
# assuming the columns of df2 are 'x' and 'color'
colors = df2.set_index('x').loc[x, 'color']
cmap = plt.get_cmap('Blues_r')
plt.bar(x,y, color=[cmap(c) for c in colors])
輸出:

uj5u.com熱心網友回復:
您可以hue=與第二個資料幀的值一起使用。您還需要dodge=False告訴 Seaborn 您想要每個 x 位置的完整條。
import seaborn as sns
import pandas as pd
import numpy as np
df1 = pd.DataFrame({'x': ['A', 'B', 'C', 'D', 'E', 'F', 'G'],
'y': [10, 40, 20, 5, 60, 30, 80]})
df2 = pd.DataFrame({'x': ['A', 'B', 'C', 'D', 'E', 'F', 'G'],
'y': [90, 70, 40, 30, 30, 20, 80]})
sns.barplot(data=df1, x='x', y='y', palette='Blues_r', hue=df2['y'], dodge=False, legend=False)

請注意,這使用中的值df2['y]進行相對著色。如果您只想使用順序,則可以使用np.argsort(df2['y'])獲取有序陣列的索引。
ax = sns.barplot(data=df1, x='x', y='y', palette='Blues_r', hue=np.argsort(df2['y']), dodge=False)
ax.legend_.remove() # remove the legend which consists of the indices 0,1,2,...
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/340510.html
標籤:蟒蛇-3.x 数据框 matplotlib 图表 海生
上一篇:帶有用戶名和角色的FastAPIPost請求,怎么做?
下一篇:如何在熊貓資料框中添加復選框
