2015-10-20 45 views
10

我用以創建所有我的地塊使用matplotlib,直到我最近發現seaborn。我發現特別有趣的事實,它可以讓你拆分小提琴,以比較給定的hue變量。seaborn violinplots:更改小提琴的顏色,軸名稱,圖例

嗯,我的主要問題是,我不知道我有什麼以改變小提琴顏色修改,軸名,或地方,我想傳說

下面是我從seaborn跟着例如:

import seaborn as sns 
    tips = sns.load_dataset("tips") 
    sns.set(style="ticks", palette="colorblind") 
    g = sns.FacetGrid(tips, col="time", size=4, aspect=.75) 
    g = g.map(sns.violinplot, "sex", "total_bill", "smoker", inner=None, linewidth=1, scale="area", split=True, width=0.75).despine(left=True).add_legend(title="smoker") 
    g.savefig(os.path.join(options.output_dir, "figures", "violinplots.png")) 

這裏是輸出數字violinplots.png

enter image description here

雖然我寧願像這樣的事情:

enter image description here

總結:

  • 使用whiteblue顏色
  • 更換軸names
  • leftmost y axis只有
  • 讓我自己legend with the blue category only

預先感謝您。任何幫助將受到歡迎。


如果有人有興趣,這裏是如何我終於解決了這個數字得益於MrPedru22

import seaborn as sns 
tips = sns.load_dataset("tips") 
sns.set(context="paper", palette="colorblind", style="ticks") 
g = sns.FacetGrid(tips, col="time", sharey=False, size=4, aspect=.5) 
g = g.map(seaborn.violinplot, "sex", "total_bill", "smoker", cut=0, inner=None, split=True, palette={"No": "#4477AA", "Yes": "white"}, saturation=1).despine(left=True) 
# Set axis labels & ticks # 
g.fig.get_axes()[0].set_xlabel("Lunch") 
g.fig.get_axes()[1].set_xlabel("Dinner") 
g.fig.get_axes()[0].set_xticklabels(["Male", "Female"]) 
g.fig.get_axes()[1].set_xticklabels(["Male", "Female"]) 
g.fig.get_axes()[0].set_ylabel("Total bill") 
g.fig.get_axes()[0].set_yticks(range(0, 80, 10)) 
g.fig.get_axes()[1].set_yticks([]) 
g.fig.get_axes()[0].spines["left"].set_visible(True) 
# Set legend # 
handles, labels = g.fig.get_axes()[0].get_legend_handles_labels() 
g.fig.get_axes()[0].legend([handles[1]], ["Non-smoker"], loc='upper left') 
# Fixing titles # 
g.fig.get_axes()[0].set_title("") 
g.fig.get_axes()[1].set_title("") 
g.plt.show() 

enter image description here

+1

您是否閱讀過文檔?然後嘗試一些? – jrjc

+1

當然,我整個週末都在上面堆疊,這就是爲什麼我要問。 對於小提琴的顏色:我已經改變了sns.violinplot中的顏色和sns.set()中的調色板由我自己的顏色調色板。當我創建兩種顏色的調色板時,它只是忽略第二種顏色。它使用第一種顏色和較淺的顏色版本。如果我定義顏色,那也是一樣。 對於這個傳說,理論上它應該把傳說放在外面,但它忽略了它。 我可以用插畫替換它們的名稱和座標軸,所以它不是什麼大不了的。但我對顏色感到非常沮喪。 – ofornes

+0

例如,你是用'despine(left = True)'移除軸的。我的猜測是你沒有閱讀過足夠的文檔。如果只有顏色的問題,嘗試減少你的問題只有顏色部分,並告訴我們你的嘗試,然後有人可能會回答。 – jrjc

回答

5

這裏有一些答案:

import seaborn as sns 
tips = sns.load_dataset("tips") 
sns.set(style="ticks", palette="colorblind") 
g = sns.FacetGrid(tips, col="time", size=4, aspect=.75) 
g = g.map(sns.violinplot, "sex", "total_bill", "smoker", palette={"No": "b", "Yes": "w"}, inner=None, linewidth=1, scale="area", split=True, width=0.75).despine(left=True) 
g.fig.get_axes()[0].legend(title= 'smoker',loc='upper left') 
g.set_axis_labels('lunch','total bill') 
sns.plt.show() 
+0

如果我理解正確,那麼這兩個小提琴圖都在'g.fig'下。因此,例如,如果我想訪問最左邊的小提琴圖中任何可能通過0 ax('g.fig.get_axes()[0]')的元素,否則通過1 ax('g.fig。 get_axes()[1]'),對吧? – ofornes

+0

是的,這是正確的。所以,當你想在午餐和晚餐時代取代性愛時,你可以用'g.fig.get_axes()[0] .set_xlabel(「lunch」)和'g.fig.get_axes()[1]來做到這一點。 set_xlabel(「dinner」)' – MrPedru22

+0

關於如何將兩個x-spines連接起來就好像它們是單一軸一樣嗎? – ofornes