作者 | 黃偉呢
整理 | 楊碧玉
出品 | 數據分析與統計學之美(ID:gh_21c25c7e71d0)
頭圖 | CSDN 下載自視覺中國
為什麼要寫這篇文章?
最近有不少粉絲來問我,Python 繪圖庫太多,我知不知道學哪一個?即使我選擇了某一個繪圖庫後,我也不知道怎麼學,我不知道第一步做什麼,也不知道接下來該怎麼做,四個字一學就忘。
其實這也是我當時很困擾的一個問題,我當時在學習完 numpy 和 pandas 後,就開始了 matplotlib 的學習。我反正是非常崩潰的,每次就感覺繪圖代碼怎麼這麼多,繪圖邏輯完全一團糟,不知道如何動手。
後面隨著自己反覆的學習,我找到了學習 Python 繪圖庫的方法,那就是學習它的繪圖原理。正所謂:「知己知彼,百戰不殆」,學會了原理,剩下的就是熟練的問題了。
今天我們就用一篇文章,帶大家梳理 matplotlib 、 seaborn 、 plotly 、 pyecharts 的繪圖原理,讓大家學起來不再那麼費勁!
matplotlib繪圖原理
關於 matplotlib 更詳細的繪圖說明,大家可以參考下面這篇文章,相信你看了以後一定學得會。
matplotlib 繪圖原理:http://suo.im/678FCo
繪圖原理說明
通過我自己的學習和理解,我將 matplotlib 繪圖原理高度總結為如下幾步:
① 導庫;② 創建 figure 畫布對象;③ 獲取對應位置的 axes 坐標系對象;④ 調用 axes 對象,進行對應位置的圖形繪製;⑤ 顯示圖形;案例說明
# 1.導入相關庫import matplotlib as mplimport matplotlib.pyplot as plt# 2.創建figure畫布對象figure = plt.figure()# 3.獲取對應位置的axes坐標系對象axes1 = figure.add_subplot(2,1,1)axes2 = figure.add_subplot(2,1,2)# 4.調用axes對象,進行對應位置的圖形繪製axes1.plot([1,3,5,7],[4,9,6,8])axes2.plot([1,2,4,5],[8,4,6,2])# 5.顯示圖形figure.show()
結果如下:
seaborn繪圖原理
在這四個繪圖庫裡面,只有 matplotlib 和 seaborn 存在一定的聯繫,其餘繪圖庫之間都沒有任何聯繫,就連繪圖原理也都是不一樣的。
seaborn 是 matplotlib 的更高級的封裝。因此學習 seaborn 之前,首先要知道 matplotlib 的繪圖原理。由於 seaborn 是 matplotlib 的更高級的封裝,對於 matplotlib 的那些調優參數設置,也都可以在使用 seaborn 繪製圖形之後使用。
我們知道,使用 matplotlib 繪圖,需要調節大量的繪圖參數,需要記憶的東西很多。而 seaborn 基於 matplotlib 做了更高級的封裝,使得繪圖更加容易,它不需要了解大量的底層參數,就可以繪製出很多比較精緻的圖形。不僅如此, seaborn 還兼容 numpy 、 pandas 數據結構,在組織數據上起了很大作用,從而更大程度上的幫助我們完成數據可視化。
由於 seaborn 的繪圖原理,和 matplotlib 的繪圖原理一致,這裡也就不詳細介紹了,大家可以參考上面 matplotlib 的繪圖原理,來學習 seaborn 究竟如何繪圖,這裡還是提供一個網址給大家。
seaborn 繪圖原理:http://suo.im/5D3VPX
案例說明
# 1.導入相關庫import seaborn as snsimport matplotlib.pyplot as pltdf = pd.read_excel("data.xlsx",sheet_name="數據源")sns.set_style("dark")plt.rcParams["font.sans-serif"] = ["SimHei"]plt.rcParams["axes.unicode_minus"] = False# 注意:estimator表示對分組後的銷售數量求和。默認是求均值。sns.barplot(x="品牌",y="銷售數量",data=df,color="steelblue",orient="v",estimator=sum)plt.show()
結果如下:
注意:可以看到在上述的繪圖代碼中,你應該有這樣一個感受,圖中既有 matplotlib 的繪圖代碼,也有 seaborn 的繪圖代碼。其實就是這樣的,我們就是按照 matplobt 的繪圖原理進行圖形繪製,只是有些地方改成 seaborn 特有的代碼即可,剩下的調整格式,都可以使用 matplotlib 中的方法進行調整。
plotly繪圖原理
首先在介紹這個圖的繪圖原理之前,我們先簡單介紹一下 plotly 這個繪圖庫。
plotly 是一個基於 javascript 的繪圖庫, plotly 繪圖種類豐富,效果美觀;易於保存與分享 plotly 的繪圖結果,並且可以與 Web 無縫集成;ploty 默認的繪圖結果,是一個 HTML 網頁文件,通過瀏覽器可以直接查看;它的繪圖原理和 matplotlib 、 seaborn 沒有任何關係,你需要單獨去學習它。同樣我還是提供了一個網址給你,讓你更詳細的學習 plotly 。
plotly 繪圖原理:http://suo.im/5vxNTu
繪圖原理說明
通過我自己的學習和理解,我將 plotly 繪圖原理高度總結為如下幾步:
① 繪製圖形軌跡,在 ployly 裡面叫做 trace ,每一個軌跡是一個 trace 。② 將軌跡包裹成一個列表,形成一個「軌跡列表」。一個軌跡放在一個列表中,多個軌跡也是放在一個列表中。③ 創建畫布的同時,並將上述的 軌跡列表 ,傳入到 Figure() 中。④ 使用 Layout() 添加其他的繪圖參數,完善圖形。⑤ 展示圖形。案例說明
import numpy as npimport pandas as pdimport plotly as pyimport plotly.graph_objs as goimport plotly.expression as pxfrom plotly import toolsdf = pd.read_excel("plot.xlsx")# 1.繪製圖形軌跡,在ployly裡面叫做`trace`,每一個軌跡是一個trace。trace0 = go.Scatter(x=df["年份"],y=df["城鎮居民"],name="城鎮居民")trace1 = go.Scatter(x=df["年份"],y=df["農村居民"],name="農村居民")# 2.將軌跡包裹成一個列表,形成一個「軌跡列表」。一個軌跡放在一個列表中,多個軌跡也是放在一個列表中。data = [trace0,trace1]# 3.創建畫布的同時,並將上述的`軌跡列表`,傳入到`Figure()`中。fig = go.Figure(data)# 4.使用`Layout()`添加其他的繪圖參數,完善圖形。fig.update_layout( title="城鄉居民家庭人均收入", xaxis_title="年份", yaxis_title="人均收入(元)")# 5.展示圖形。fig.show()
結果如下:
pyecharts繪圖原理
Echarts 是一個由百度開源的數據可視化工具,憑藉著良好的交互性,精巧的圖表設計,得到了眾多開發者的認可。而 python 是一門富有表達力的語言,很適合用於數據處理。當數據分析遇上了數據可視化時, pyecharts 誕生了。
pyecharts 分為 v0.5 和 v1 兩個大版本, v0.5 和 v1 兩個版本不兼容,v1是一個全新的版本,因此我們的學習儘量都是基於 v1 版本進行操作。
和 plotly 一樣,pyecharts 的繪圖原理也是完全不同於 matplotlib 和 seaborn ,我們需要額外的去學習它們的繪圖原理,基於此,同樣提供一個網址給你,讓你更詳細的學習 pyecharts 。
pyecharts 的繪圖原理:http://suo.im/5S1PF1
繪圖原理說明
通過我自己的學習和理解,我將 plotly 繪圖原理高度總結為如下幾步:
① 選擇圖表類型;② 聲明圖形類並添加數據;③ 選擇全局變量;④ 顯示及保存圖表;案例說明
# 1.選擇圖表類型:我們使用的是線圖,就直接從charts模塊中導入Line這個模塊;from pyecharts.charts import Lineimport pyecharts.options as optsimport numpy as npx = np.linspace(0,2 * np.pi,100)y = np.sin(x)(# 2.我們繪製的是Line線圖,就需要實例化這個圖形類,直接Line()即可; Line()# 3.添加數據,分別給x,y軸添加數據; .add_xaxis(xaxis_data=x) .add_yaxis(series_name="繪製線圖",y_axis=y,label_opts=opts.LabelOpts(is_show=False)) .set_global_opts(title_opts=opts.TitleOpts(title="我是標題",subtitle="我是副標題",title_link="https://www.baidu.com/"), tooltip_opts=opts.TooltipOpts())).render_notebook() # 4.render_notebook()用於顯示及保存圖表;
結果如下:
小結
通過上面的學習,我相信肯定會讓大家對於這些庫的繪圖原理,一定會有一個新的認識。
其實其實不管是任何編程軟體的繪圖庫,都有它的繪圖原理。我們與其盲目的去繪製各種各樣的圖形,不如先搞清楚它們的套路後,再去進行繪圖庫的圖形練習,這樣下去,我覺得大家會有一個很大的提高。