Python因?yàn)槠湔Z法簡單僻焚、膠水語言的特性锁右,誕生了很多好用的輪子(標(biāo)準(zhǔn)庫面哥、第三方庫),也因此讓Python一度成為了最熱門的編程語言(2023年1-10月 TIOBE編程語言排名第一)趴樱。
我用過很多Python庫馒闷,因?yàn)閿?shù)據(jù)分析展示的需要,經(jīng)常用一些可視化庫來設(shè)計(jì)圖表叁征,這些庫有不同的應(yīng)用場景纳账,生產(chǎn)力非常強(qiáng)大。
基礎(chǔ)可視化:Matplotlib捺疼、Seaborn疏虫、Altair
交互可視化:Bokeh、plotly
地圖可視化:Cartopy、Folium
Web可視化:Dash
BI可視化:Superset
流程圖可視化:PyGraphviz
下面詳細(xì)介紹下常見的5個(gè)可視化庫:Matplotlib卧秘、Seaborn呢袱、Altair、Bokeh翅敌、plotly
1. Matplotlib
Matplotlib不必多說羞福,它是最流行的Python可視化庫,可以繪制二維蚯涮、三維治专、動(dòng)態(tài)、交互等任何圖表遭顶,也是Seaborn等眾多可視化庫的底層依賴张峰。
學(xué)習(xí)文檔:https://matplotlib.org/
Matplotlib的特點(diǎn)是圖表功能齊全,可定制化強(qiáng)液肌,一般專業(yè)的新聞圖表挟炬、科研圖表鸥滨、出版圖表嗦哆、企業(yè)圖表都可以用Matplotlib繪制。
唯一的缺點(diǎn)是高級(jí)封裝不多婿滓,繪圖代碼稍顯復(fù)雜老速。
import matplotlib.pyplot as plt
data = {'apple': 10, 'orange': 15, 'lemon': 5, 'lime': 20}
names = list(data.keys())
values = list(data.values())
fig, axs = plt.subplots(1, 3, figsize=(9, 3), sharey=True)
axs[0].bar(names, values)
axs[1].scatter(names, values)
axs[2].plot(names, values)
fig.suptitle('Categorical Plotting')
2. Seaborn
Seaborn是在Matplotlib基礎(chǔ)上經(jīng)過高級(jí)封裝的可視化庫,一般用于統(tǒng)計(jì)分析凸主,是數(shù)據(jù)科學(xué)領(lǐng)域的核心可視化庫橘券,類似于kaggle這種數(shù)據(jù)比賽大部分都用Seaborn。
解釋下高級(jí)封裝卿吐,所謂封裝就是把很多圖表的功能模塊化旁舰,拿來即用,不需要你寫很多代碼實(shí)現(xiàn)嗡官。
比如說Seaborn可以一行代碼設(shè)置圖表的配色風(fēng)格箭窜,什么統(tǒng)計(jì)風(fēng)、商務(wù)風(fēng)衍腥、學(xué)術(shù)風(fēng)磺樱,都給你搭配的妥妥的,還有像置信區(qū)間這種專業(yè)領(lǐng)域的圖表也集成到函數(shù)中婆咸。
學(xué)習(xí)文檔:https://seaborn.pydata.org/
另外Seaborn與Pandas竹捉、Numpy集成的非常好,可以輕松使用Series尚骄、DataFrame块差、array數(shù)據(jù)類型進(jìn)行圖表開發(fā),相較于Matplotlib節(jié)省了很多數(shù)據(jù)處理的時(shí)間,讓你更加專注于制圖憨闰。
示例:
import seaborn as sns
sns.set_theme(style="darkgrid")
tips = sns.load_dataset("tips")
g = sns.jointplot(x="total_bill", y="tip", data=tips,
kind="reg", truncate=False,
xlim=(0, 60), ylim=(0, 12),
color="m", height=7)
3. Altair
Altair也是Python中一個(gè)主打統(tǒng)計(jì)分析的可視化庫询兴,它和Seaborn不同的是,語法會(huì)更加簡潔起趾,讓你在可視化的過程中去分析梳理數(shù)據(jù)诗舰。
Altair基于Vega-Lite語法規(guī)則,將可視化描述為從數(shù)據(jù)到圖形標(biāo)記(例如训裆,圓圈眶根、矩形或折線)的屬性(例如,顏色边琉、大小属百、形狀或透明度)的編碼映射過程,使用Json的格式規(guī)范圖表外觀变姨,使用起來非常簡單族扰。
學(xué)習(xí)文檔:https://altair-viz.github.io/
示例代碼
import altair as alt
from vega_datasets import data
source = data.iris()
alt.Chart(source).mark_circle().encode(
alt.X('sepalLength').scale(zero=False),
alt.Y('sepalWidth').scale(zero=False, padding=1),
color='species',
size='petalWidth'
)
4. Bokeh
Bokeh主打web交互式可視化,圖表不再是冷冰冰的圖片定欧,而是可以隨意去調(diào)整的可視化交互工具渔呵,比如創(chuàng)建看板、應(yīng)用砍鸠、網(wǎng)頁扩氢,都可以輕松實(shí)現(xiàn),你也可以在jupyter notebook上去展示Bokeh圖表爷辱。
Bokeh有很多的交互工具录豺,比如縮放、平移饭弓、框選双饥、懸停、重置弟断、編輯咏花、圖像導(dǎo)出等等,使用起來非常方便夫嗓。
學(xué)習(xí)文檔:https://docs.bokeh.org/
- 搭建可視化應(yīng)用
- 搭建看板
- Jupyter notebook數(shù)據(jù)可視化探索
- 數(shù)據(jù)流分析
- web網(wǎng)頁
示例代碼
import numpy as np
import pandas as pd
from bokeh.palettes import tol
from bokeh.plotting import figure, show
N = 10
df = pd.DataFrame(np.random.randint(10, 100, size=(15, N))).add_prefix('y')
p = figure(x_range=(0, len(df)-1), y_range=(0, 800))
p.grid.minor_grid_line_color = '#eeeeee'
names = [f"y{i}" for i in range(N)]
p.varea_stack(stackers=names, x='index', color=tol['Sunset'][N], legend_label=names, source=df)
p.legend.orientation = "horizontal"
p.legend.background_fill_color = "#fafafa"
show(p)
5. plotly
plotly.js是非常出名的交互式可視化工具迟螺,它有Python的第三方接口,也就是plotly庫舍咖。
plotly圖表類型比較豐富矩父,比如折線圖、散點(diǎn)圖排霉、面積圖掖蛤、條形圖、誤差條邓了、方框圖滋迈、直方圖佃蚜、熱圖、子圖、多軸圖、極坐標(biāo)圖微驶、氣泡圖、地圖等等开睡,這些都集成好固定的函數(shù)用法因苹,可以拿來即用。
plotly繪制的圖表相對(duì)比較美觀篇恒,適合商用展示扶檐,且它的圖表可以基于web,能進(jìn)行多元化的交互操作胁艰。
其次plotly可定制化也非常強(qiáng)款筑,類似于matplotlib,你可以對(duì)圖表做任何細(xì)節(jié)的修改腾么。
學(xué)習(xí)文檔:https://plotly.com/python/
示例代碼
import plotly.graph_objects as go
import numpy as np
# Data to be plotted
x = np.outer(np.linspace(-2, 2, 30), np.ones(30))
y = x.copy().T
z = np.cos(x ** 2 + y ** 2)
# plotting the figure
fig = go.Figure(data=[go.Surface(x=x, y=y, z=z)])
fig.show()
小結(jié)
上述的5個(gè)Python可視化庫都是Python中比較常見的奈梳,幾乎能實(shí)現(xiàn)你大部分需求,還有一些垂直類的需求需要專門的庫來實(shí)現(xiàn)哮翘,比如BI颈嚼、地圖等等毛秘,這個(gè)后面慢慢分享饭寺。