在Python中用Seaborn美化圖表的3個示例

進行研究時,選擇圖像模式一般很容易,說實話:向團隊或客戶傳達圖像模式有時要困難得多。 不僅很難用外行術語解釋某些圖像模式(嘗試向非數學家解釋一個數學符號),而且有時,您還需要試圖表示對各種模式需要依賴的條件……怎麼說呢?

​ 圖表對於我們研究人員至關重要,因此我們需要它們能夠很好地傳達我們的意思。 如果沒有這些,我們的知識和發現所承擔的責任要輕得多,但圖表仍然具有最佳的視覺效果,所以我們需要確保圖表可以儘可能地傳達我們的發現。

​ 在下面,我將討論Seaborn以及爲什麼我相對於其他第三方庫更喜歡它。 我還將給出我經常使用的3張圖表。

爲什麼選擇Seaborn

​ 令人驚訝的是,流行的Python圖表庫很少而且功能相差甚遠,因爲很難進行一刀切的設置:認爲Matplotlib旨在反映Matlab輸出和ggplot,與R語言中的繪圖方式相似。

​ 關於爲什麼我更喜歡Seaborn而不是其他第三方庫的原因:

  1. Seaborn與Matplotlib比需要少得多的代碼就可以生成類似的高質量輸出
  2. Chartifys的視覺效果不是很好(Spotify-有點太笨拙了)。
  3. ggplot似乎不是Python固有的,所以感覺我一直在努力使它對我有用。
  4. Plotly有一個“社區版本”,這讓我對這部分未來是否許可有一定擔憂,因此我通常會遠離這些內容。 從設計角度和功能上來說,它實際上是相當不錯的,並且提供了廣泛的產品組合,但是,它並沒有比Seaborn好多少。

​ 最重要的是,研究人員通常需要花費大量時間來繪製分佈圖,如果不能輕鬆地繪製分佈圖,則您的繪製程序包實際上是多餘的。 Seaborn繪製直方圖很方便,而KDE與其他軟件包確實很難做到(Plotly例外)。

​ 最後,Seaborn涵蓋了所有設計方面的內容,這使您(研究人員)有更多的時間進行研究。 Matplotlib的視覺效果很不好,Chartify太難以使用,我都不太喜歡。

單變量分佈圖

​ 如果您發現了一個隨機變量,其分佈有一定規律,那麼Seaborn的調度功能將非常有用。 通過顯示以下內容有助於傳達圖片特徵:

  1. 直方圖形式的基礎分佈
  2. 頂部附近有一個近似功能,可以提供平滑的圖像

​ 網格線和清晰的字體顏色(漂亮的半透明的藍色)可提供簡單有效的服務!

圖1:隨機單變量分佈

聯合分佈

​ 在這裏,我們嘗試傳達更多更復雜的動態信息。 我們有兩個我們認爲應該關聯的變量,但是如何可視化這種關係呢?

​ 圖表兩個側面分佈非常適合從視覺上觀察邊緣分佈,而面積圖非常適合識別密度較大的區域。

圖2:兩個隨機變量的聯合分佈

​ 我在研究和文章中都使用了這種圖,因爲它使我能夠將單變量動力學(帶有內核圖)和聯合動力學保持在我的思想和觀察的最前沿:所有這些都在傳達我所經歷的思考。 在分層討論方面非常有用,我強烈建議您使用。

箱形圖和晶須圖

​ 分佈圖的問題在於,它們常常會被異常值扭曲,除非您知道這些異常值存在並且進行處理。

​ 箱形圖得到了廣泛的使用,它是一種顯示可靠的指標的有效方法,例如中位數和四分位數範圍,它們對於異常值(由於其較高的分解點)具有更大的彈性,

​ Seaborn的箱形圖實施方式看起來很棒,因爲它可以突出顯示多個維度來傳達一個相當複雜的指標,同時,其視覺效果也足以適合學術期刊。 此外,Seaborn還出色地完成了提高代碼效率的工作,從而使研究人員不必花時間來使代碼可讀。

圖4:箱形圖和晶須圖

​ 同時識別和討論多種功能和模式對於您的研究成功至關重要,因此,我強烈建議您使用此圖表。 同時,您需要確保將圖表定位到您的受衆羣體!

​ 在上面的文章中,我廣泛討論了爲什麼對我來說Seaborn是最好的繪圖程序包,並給出了我使用的3個圖表示例。 我堅信以一種容易理解的方式傳達信息:文字越少越好! 堅持纔是關鍵!

​ 這些圖表使您輕鬆地做到這一點,因此,如果您是視覺研究員,或者如果您喜歡看全局,那麼Seaborn就適合您。

​ 再次感謝,如果您有任何疑問,請告訴我!

代碼

​ 以下代碼段是用於創建上面很棒的圖表的簡單代碼段!

圖0:子圖

import seaborn as sns
df = sns.load_dataset(“iris”)
sns.pairplot(df, hue=”species”)

圖1:單變量分佈

x = np.random.normal(size=100)
sns.distplot(x);

圖2:聯合分佈

mean, cov = [0, 1], [(1, .5), (.5, 1)]
data = np.random.multivariate_normal(mean, cov, 200)
df = pd.DataFrame(data, columns=["x", "y"])
sns.jointplot(x="x", y="y", data=df, kind="kde");

圖3:多變量聯合分佈

iris = sns.load_dataset('iris')
g = sns.PairGrid(iris)
g.map_diag(sns.kdeplot)
g.map_offdiag(sns.kdeplot, n_levels=6);

圖4:箱形圖和晶須圖

import seaborn as sns
import matplotlib.pyplot as pltsns.set(style="ticks")# Initialize the figure with a logarithmic x axis
f, ax = plt.subplots(figsize=(7, 6))
ax.set_xscale("log")# Load the example planets dataset
planets = sns.load_dataset("planets")# Plot the orbital period with horizontal boxes
sns.boxplot(x="distance", y="method", data=planets,whis="range", palette="vlag")# Add in points to show each observation
sns.swarmplot(x="distance", y="method", data=planets,size=2, color=".3", linewidth=0)# Tweak the visual presentation
ax.xaxis.grid(True)
ax.set(ylabel="")
sns.despine(trim=True, left=True)

作者:Sohaib Ahmad

翻譯:孟翔傑

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章