簡體   English   中英

Seaborn 子圖為 n 個最高條提供不同顏色

[英]Seaborn subplots give n highest bars different color

我正在使用 seaborn.FacetGrid 創建一組條形圖。 我還想為每個子圖的 n 個最高條着色。 我怎么做? 下面的代碼生成條形圖的常規子圖。

import seaborn as sns
import numpy as np
np.random.seed(0)
df = pd.DataFrame({'Category': ['A','B', 'C'], 'Variable A': np.random.choice(5,3), 'Variable B':np.random.choice(5,3), 'Variable C': np.random.choice(5,3)})
g = sns.FacetGrid(df.melt(id_vars = 'Category'), col = 'Category', col_wrap = 1, height =1.7, aspect =5)
g.map(sns.barplot,'variable','value')

在此處輸入圖片說明

在這個例子中,我如何將每個子圖的兩個最高條着色為與其他顏色(例如藍色)不同的顏色(例如橙色)?

我認為,如果你想要一個比 seaborn 允許的更可定制的輸出,你可能最好根本不使用 seaborn 並直接使用 matplotlib 的函數進行繪圖......

但無論如何,這里有一個適用於您的測試場景的解決方案:

np.random.seed(0)
df = pd.DataFrame({'Category': ['A','B', 'C'], 'Variable A': np.random.choice(5,3), 'Variable B':np.random.choice(5,3), 'Variable C': np.random.choice(5,3)})
g = sns.FacetGrid(df.melt(id_vars = 'Category'), col = 'Category', col_wrap = 1, height =1.7, aspect =5)
g.map(sns.barplot,'variable','value')

top_N = 2
color = 'orange'
for ax in g.axes:
    heights = [p.get_height() for p in ax.patches]
    top = np.argsort(heights)[-top_N:]
    for p in [ax.patches[i] for i in top]:
        p.set_facecolor(color)

在此處輸入圖片說明

暫無
暫無

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

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