2016-10-05 141 views
2

我希望列的顏色由它們在x軸上的值確定,例如,在x軸上具有相同值的條應該分配相同的顏色。在seaborn barplot中按列值定義色相

import seaborn as sns 
import matplotlib.pyplot as plt 
import numpy as np 
import pandas as pd 

df = pd.DataFrame(index=['A','B','C','D','E','F'],data={'col1':np.array([2.3423,4.435,9.234,9.234,2.456,6.435])}) 
ax = sns.barplot(x='col1', y=df.index.values, data=df,palette='magma') 

這就是現在使用默認設置時的樣子。我認爲有這樣一個簡單而優雅的方式,但對任何解決方案都感興趣。

enter image description here

+0

您是否嘗試指定色相?也就是將'hue ='col1''添加爲'sns.barplot'的參數。 – lanery

+0

不能修復它 – themachinist

回答

2

這裏的溶液:

import seaborn as sns 
import matplotlib as mpl, matplotlib.pyplot as plt 
import numpy as np 
import pandas as pd 

df = pd.DataFrame(index=['A','B','C','D','E','F'], 
    data={'col1':np.array([2.3423,4.435,9.234,9.234,2.456,6.435])}) 
ax = sns.barplot(x='col1', y=df.index.values, data=df, 
    palette=mpl.cm.magma(df['col1']*.1)) 

注:mpl.cm.magmaColormap實例,並在用於將數據值(浮子)從區間轉換[0,1]〜顏色,所述Colormap代表。如果您希望對數據值進行「自動縮放」,則可以使用palette=mpl.cm.ScalarMappable(cmap='magma').to_rgba(df['col1'])代替sns.barplot()調用。

此處的輸出:barplot

+0

您應該使用matplotlib normalize對象來避免在這裏手動指定標量因子。 – mwaskom

+0

@mwaskom,我在筆記中建議的'ScalarMappable'選項自動使用'Normalize'對象,請參見[docs](http://matplotlib.org/api/cm_api.html#matplotlib.cm.ScalarMappable)。不過,手動指定版本的顏色看起來更漂亮。 :) –

+0

哎呀完全錯過了代碼後的段落,對不起! – mwaskom