上期推文推出第一篇基礎圖表繪製-R-ggplot2 基礎圖表繪製-散點圖 的繪製推文,得到了很多小夥伴的喜歡,也是我更加想使這個系列做的更加完善和系統,我之前也有說過,會推出Python和R的兩個版本繪製教程,接下來我們就推出基礎散點圖的Python繪製版本。本期主要涉及的知識點如下:
Python-seaborn 繪製多類別散點圖由於涉及的圖表類型為多類別散點圖的繪製,在使用常規matplotlib進行繪製時會顯得格外繁瑣,所以我們選擇了對matplotlib進行了更高級的API封裝,使作圖更加容易的seaborn包進行圖表的繪製,更多seaborn 介紹,大家可以直接去seaborn官網進行相關資料的查閱。數據的讀取使用的功能強大的數據處理包 pandas ,這裡只是進行簡單的刪除空值操作,直接使用dropna() 函數操作即可,我們直接預覽數據,如下(部分):由於我們直接使用了seaborn進行圖表的繪製,繪圖代碼也得到了極大的簡化,默認的繪圖代碼如下:
fig, ax = plt.subplots(figsize=(6,5),dpi=200)
scatter = sns.scatterplot(data=penguins_df,x="bill_length_mm",y="bill_depth_mm",hue="species",
size="body_mass_g",ec="k",alpha=.9,ax=ax)
scatter.legend()
ax.text(.91,-.1,'\nVisualization by DataCharm',transform = ax.transAxes,
ha='center', va='center',fontsize = 7,color='black')可視化效果如下:
這配色、這布局······,這個圖表中主要存在如下問題:
針對以上幾個問題,接下來我們對其進行美化操作。
seaborn 定製化美化操作詳細的美化操作對於seaborn來說,代碼過多,且需記住的繪圖函數也較多,這裡和R-ggplot2 繪圖一樣,我們直接選擇matplotlib 繪圖主題進行設置即可,此外,我們還對圖例等圖元素進行設置,具體代碼如下:
plt.rcParams["font.family"] = "Arial-Narrow"
palette = ("#FF8C00", "#A034F0", "#159090")
plt.style.use('fivethirtyeight')
fig, ax = plt.subplots(figsize=(6,5),dpi=200)
scatter = sns.scatterplot(data=penguins_df,x="bill_length_mm",y="bill_depth_mm",hue="species",size="body_mass_g",
palette=palette,ec="white",alpha=.9,ax=ax)
#自定義圖例設置
handles,labels = scatter.get_legend_handles_labels()
labels_size = labels[5:]
labels_size = [str(int(i)/1000)+" kg" for i in labels_size]
scatter.legend(handles=handles[1:4] + handles[5:], labels=labels[1:4] + labels_size ,ncol=1,loc="lower right",
frameon=False,fontsize=7,markerscale=1,bbox_to_anchor=(1, 0.0))
scatter.set_xlabel("Bill length (mm)")
scatter.set_ylabel("Bill depth (mm)")
#添加標題
ax.text(-.08,1.1,"Base Charts in Python Exercise 01: Point Charts",
transform = ax.transAxes,color='k',ha='left',va='center',size=15,fontweight='extra bold')
ax.text(.91,-.1,'\nVisualization by DataCharm',transform = ax.transAxes,
ha='center', va='center',fontsize = 7,color='black')
plt.show()這裡注意以下幾點:
plt.style.use('fivethirtyeight')這樣就選擇了對應的繪圖主題。
handles,labels = scatter.get_legend_handles_labels()
labels_size = labels[5:]
labels_size = [str(int(i)/1000)+" kg" for i in labels_size]
scatter.legend(handles=handles[1:4] + handles[5:], labels=labels[1:4] + labels_size ,ncol=1,loc="lower right",
frameon=False,fontsize=7,markerscale=1,bbox_to_anchor=(1, 0.0))該部分代碼就實現了圖例的定製化操作,具體包括:圖例元素選擇、位置以及排列方式等.
這裡指出一下:由於seaborn是對matplotlib的高度封裝,這也導致其對個別圖表元素的定製化設置就相對較難(如圖例)
最終的可視化效果如下:
當然我們還可以將圖例放置在上方並排顯示,對應修改代碼如下:
scatter.legend(handles=handles[1:4] + handles[5:], labels=labels[1:4] + labels_size ,ncol=8,loc="upper center",
frameon=False,fontsize=7,markerscale=1,bbox_to_anchor=(0.5, 1.03))可視化效果如下:
總結本期推文我們推出了基礎散點圖的Python繪製版本,希望可以滿足喜歡使用Python繪圖的小夥伴。大家有啥意見也可以在文末 讀者討論 區進行談論交流啊。