首頁?學習  »   正文

如何在Python里用ggplot2繪圖

如何在Python里用ggplot2繪圖

為了嚴格實現圖形語法,ggplot2提供了一種非常直觀和一致的方式來繪制數據。ggplot2的繪圖方法不僅確保每個繪圖包含特定的基本元素,而且在很大程度上簡化了代碼的可讀性。

但是,如果您經常使用Python,那么實現圖形語法將非常具有挑戰性,因為在流行的繪圖庫(如matplotlib或seaborn)中缺少標準化語法。如果您仍然希望使用圖形語法,那么Python包plotnine為您提供了另一種選擇。

圖形語法

如果你不熟悉圖形語法,下面簡單介紹一下:

如何在Python里用ggplot2繪圖

圖形語法的主要組成部分

可以看到,從數據開始,有幾個組件組成了圖形語法。在確定要可視化的數據之后,必須指定感興趣的變量。例如,您可能希望在x軸上顯示一個變量,在y軸上顯示另一個變量。第三,您必須定義要使用哪種類型的幾何對象(簡稱geom)。這可以是從條形圖到散點圖或任何其他現有繪圖類型的任何內容。

前三個部分是強制性的。沒有數據,就沒有什么可以繪制的。如果沒有軸的定義,也沒有什么可以繪制的。最后,不定義幾何對象,你只會看到一個空坐標系。構成圖形語法的其余組件是可選的,可以實現它們來改進可視化。facet指的是子圖的規范,也就是說,在單獨的圖中,將數據中的多個變量相鄰地繪制在一起。統計轉換主要指在圖表中包含匯總統計信息,例如中位數或百分位數。坐標描述了不同的坐標系。最常用和默認的坐標系是笛卡爾坐標系。根據您想要繪制的數據的結構,使用較少的坐標系(如極坐標系統)可能提供一種更好的可視化數據的方法。最后,主題提供了各種選項來設計繪圖的所有非數據元素,如圖例、背景或注釋。

雖然有很多可視化圖形語法的方法,但我特別喜歡上面創建的語法,因為它意味著這些層的可加性,以及它們之間正在相互構建的事實。如果您曾經使用過ggplot2,那么您應該熟悉語法中的“+”,它表示上面描述的相同的思想。

plotnine

plotnine是一個Python包,允許您使用類似ggplot2的代碼來實現圖形語法。通過這樣做,就像在ggplot2中一樣,您可以將數據映射到構成可視化的可視對象。這使您能夠提高代碼的可讀性和結構。雖然可以將matplotlib的樣式設置為ggplot,但是不能像在ggplot2中那樣在matplotlib中實現圖形語法。

安裝

在開始之前,您必須安裝plotnine。像往常一樣,有兩種主要的選擇:pip和conda。

# Using pip
pip install plotnine         

# Using conda
conda install -c conda-forge plotnine

作圖

安裝了plotnine之后,就可以開始使用圖形語法進行繪圖了。讓我們從構建一個非常簡單的繪圖開始,只使用三個必需的組件:數據、美學和幾何對象。

如何在Python里用ggplot2繪圖

如您所見,語法與ggplot2非常相似。首先,我們指定數據源。在我們的例子中,我們使用的數據是經典的MPG數據集。接下來,我們定義變量“class”將顯示在x軸上。最后,我們說我們要使用一個條形圖,其中的條形圖大小為20,以可視化我們的數據。讓我們看看完整的代碼和結果圖:

import pandas as pd
import numpy as np
from pandas.api.types import CategoricalDtype
from plotnine import *
from plotnine.data import mpg
%matplotlib inline

(ggplot(mpg)         # defining what data to use
 + aes(x='class')    # defining what variable to use
 + geom_bar(size=20) # defining the type of plot to use
)

上述代碼將產生以下輸出:

如何在Python里用ggplot2繪圖

雖然這是一個良好的開端,但目前來看它還不是很好。讓我們用圖形語法的其他組成部分來美化我們的情節。

(ggplot(mpg)
 + aes(x='class')
 + geom_bar(size=20)
 + coord_flip()        # flipping the x- and y-axes
 + labs(title='Number of Vehicles per Class', x='Vehicle Class', y='Number of Vehicles') # customizing labels
)

例如,我們可以使用coord_flip()翻轉坐標軸,并使用labs()自定義繪圖和軸標題,以改進繪圖。使用上面的代碼塊,我們的繪圖如下所示:

如何在Python里用ggplot2繪圖

繪制多維數據

除了基本的繪圖之外,您幾乎可以在ggplot2中做任何其他可以做的事情,比如繪制多維數據。如果你想可視化三個變量之間的關系,您可以將美學添加到另一個二維圖中:

(ggplot(mpg)
 + aes(x='displ', y='hwy', color='class')
 + geom_point()
 + labs(title='Engine Displacement vs. Highway Miles per Gallon', x='Engine Displacement, in Litres', y='Highway Miles per Gallon')
)

將顏色添加到美學中會提示plotnine在其y軸上使用disp(發動機排量,單位為升)在其x和hwy(高速公路英里/加侖)上顯示二維繪圖,并根據變量類對數據進行著色。我們還將幾何對象切換到geom_point(),這將為我們提供一個散點圖,而不是條形圖。讓我們來看看會是什么樣子:

如何在Python里用ggplot2繪圖

結論

如您所見,plotnine為您提供了利用Python中圖形語法的能力。這提高了代碼的可讀性,并允許您將部分數據具體映射到可視對象。如果你已經熟悉ggplot2,那么你就不需要學習任何新的東西來掌握plotnine。但是如果你沒有,就要行動起來,趕快去學吧~

歡迎關注ATYUN官方公眾號,商務合作及內容投稿請聯系郵箱:[email protected]

發表評論