參考一下第一步:簡單實現(xiàn)裝飾器 def login(func): print("in Login") return func def tv(name): print("{name} in TV".format(name = name)) tv = login(tv) tv('Jack') # out: # in Login # Jack in TV 第二步:同上 效果相同,但是使用的是@login def login(func): print("in Login") return func @login def tv(name): print("{name} in TV".format(name = name)) #tv = login(tv) tv('Jack') # out: # in Login # Jack in TV 但是出現(xiàn)問題,注銷最后的執(zhí)行語句仍有輸出,原因在于@login的調用,即@login相當于執(zhí)行了tv = login(tv) 所以才有輸出。 def login(func): print("in Login") return func @login def tv(name): print("{name} in TV".format(name = name)) #tv = login(tv) #tv('Jack') # out: # in Login 如下調整可解決 def login(func): def inner(arg): print("in Login") # return func func(arg) return inner @login def tv(name): print("{name} in TV".format(name = name)) #tv = login(tv) tv('Jack') # out: # in Login # Jack in TV 簡單的遞歸函數(shù) #!/usr/bin/env python #遞歸函數(shù) def calc(num): print("Number:",num) if num/2 1: calc(num/2) print("After Number:",num/2) calc(10) # Number: 10 # Number: 5.0 # Number: 2.5 # Number: 1.25 # After Number: 1.25 # After Number: 2.5 # After Number: 5.0 遞歸實現(xiàn)斐波那契數(shù)列 # Fibonacci sequence # F[n]=F[n-1]+F[n-2](n=2,F[0]=1,F[1]=1) # 斐波那契數(shù)列:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ... fibList = [1,1] def getFib(fibList): print(fibList) if fibList[-1] + fibList[-2] 300: fibList.append(fibList[-1] + fibList[-2]) getFib(fibList) pass pass getFib(fibList) print("[FINAL]:",fibList) # [1, 1] # [1, 1, 2] # [1, 1, 2, 3] # [1, 1, 2, 3, 5] # [1, 1, 2, 3, 5, 8] # [1, 1, 2, 3, 5, 8, 13] # [1, 1, 2, 3, 5, 8, 13, 21] # [1, 1, 2, 3, 5, 8, 13, 21, 34] # [1, 1, 2, 3, 5, 8, 13, 21, 34, 55] # [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89] # [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144] # [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233] # [FINAL]: [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233]
創(chuàng)新互聯(lián)建站憑借在網(wǎng)站建設、網(wǎng)站推廣領域領先的技術能力和多年的行業(yè)經(jīng)驗,為客戶提供超值的營銷型網(wǎng)站建設服務,我們始終認為:好的營銷型網(wǎng)站就是好的業(yè)務員。我們已成功為企業(yè)單位、個人等客戶提供了做網(wǎng)站、網(wǎng)站建設服務,以良好的商業(yè)信譽,完善的服務及深厚的技術力量處于同行領先地位。
本文是《數(shù)據(jù)蛙三個月強化課》的第二篇總結教程,如果想要了解 數(shù)據(jù)蛙社群 ,可以閱讀 給DataFrog社群同學的學習建議 。溫馨提示:如果您已經(jīng)熟悉python可視化內容,大可不必再看這篇文章,或是之挑選部分文章
對于我們數(shù)據(jù)分析師來說,不僅要自己明白數(shù)據(jù)背后的含義,而且還要給老板更直觀的展示數(shù)據(jù)的意義。所以,對于這項不可缺少的技能,讓我們來一起學習下吧。
畫圖之前,我們先導入包和生成數(shù)據(jù)集
我們先看下所用的數(shù)據(jù)集
折線圖是我們觀察趨勢常用的圖形,可以看出數(shù)據(jù)隨著某個變量的變化趨勢,默認情況下參數(shù) kind="line" 表示圖的類型為折線圖。
對于分類數(shù)據(jù)這種離散數(shù)據(jù),需要查看數(shù)據(jù)是如何在各個類別之間分布的,這時候就可以使用柱狀圖。我們?yōu)槊總€類別畫出一個柱子。此時,可以將參數(shù) kind 設置為 bar 。
條形圖就是將豎直的柱狀圖翻轉90度得到的圖形。與柱狀圖一樣,條形圖也可以有一組或多種多組數(shù)據(jù)。
水平條形圖在類別名稱很長的時候非常方便,因為文字是從左到右書寫的,與大多數(shù)用戶的閱讀順序一致,這使得我們的圖形容易閱讀。而柱狀圖在類別名稱很長的時候是沒有辦法很好的展示的。
直方圖是柱形圖的特殊形式,當我們想要看數(shù)據(jù)集的分布情況時,選擇直方圖。直方圖的變量劃分至不同的范圍,然后在不同的范圍中統(tǒng)計計數(shù)。在直方圖中,柱子之間的連續(xù)的,連續(xù)的柱子暗示數(shù)值上的連續(xù)。
箱線圖用來展示數(shù)據(jù)集的描述統(tǒng)計信息,也就是[四分位數(shù)],線的上下兩端表示某組數(shù)據(jù)的最大值和最小值。箱子的上下兩端表示這組數(shù)據(jù)中排在前25%位置和75%位置的數(shù)值。箱中間的橫線表示中位數(shù)。此時可以將參數(shù) kind 設置為 box。
如果想要畫出散點圖,可以將參數(shù) kind 設置為 scatter,同時需要指定 x 和 y。通過散點圖可以探索變量之間的關系。
餅圖是用面積表示一組數(shù)據(jù)的占比,此時可以將參數(shù) kind 設置為 pie。
我們剛開始學習的同學,最基本應該明白什么數(shù)據(jù)應該用什么圖形來展示,同學們來一起總結吧。
幾周前,R語言社區(qū)經(jīng)歷了一場關于畫圖工具的討論。對于我們這種外人來說,具體的細節(jié)并不重要,但是我們可以將一些有用的觀點運用到 Python 中。討論的重點是 R 語言自帶的繪圖工具 base R 和 Hadley Wickham 開發(fā)的繪圖工具 ggplot2 之間的優(yōu)劣情況。如果你想了解更多細節(jié)內容,請閱讀以下幾篇文章:
其中最重要的兩個內容是:
不是所有人都認同第二個觀點,ggplot2確實無法繪制出所有的圖表類型,但是我會利用它來做分析。
以下是 2016 年 4 月寫的關于繪圖工具的概述。出于多方面的原因,繪圖工具的選取更多地取決于個人偏好,因此本文介紹的 Python 繪圖工具也僅代表我的個人使用偏好。
Matplotlib 是一個強大的工具,它是 Pandas' builtin-plotting 和 Seaborn 的基礎。 Matplotlib 能夠繪制許多不同的圖形,還能調用多個級別的許多 API 。我發(fā)現(xiàn) pyplot api 非常好用,你可能用不上 Transforms 或者 artists ,但是如果你有需求的話可以查閱幫助文檔。我將從 pandas 和 seaborn 圖開始介紹,然后介紹如何調用 pyplot 的 API 。
DataFrame 和 Series 擁有 .plot 的命名空間,其中有許多圖形類別可供選擇(line, hist, scatter, 等等)。 Pandas 對象還提供了額外的用于增強圖形展現(xiàn)效果的數(shù)據(jù),如索引變量。
由于 pandas 具有更少的向后兼容的限制,所以它具有更好的美學特性。從這方面來說,我認為 pandas 中的 DataFrame.plot 是一個非常實用的快速探索性分析的工具。
Michael Waskom 所開發(fā)的 Seaborn 提供了一個高層次的界面來繪制更吸引人統(tǒng)計圖形。 Seaborn 提供了一個可以快速探索分析數(shù)據(jù)不同特征的 API 接口,接下來我們將重點介紹它。
Bokeh 是一款針對瀏覽器開發(fā)的可視化工具。
和 matplotlib 一樣,**Bokeh
** 擁有一系列 API 接口。比如 glpyhs 接口,該接口和 matplotllib 中的 Artists 接口非常相似,它主要用于繪制環(huán)形圖、方形圖和多邊形圖等。最近 Bokeh 又開放了一個新的圖形接口,該接口主要用于處理詞典數(shù)據(jù)或 DataFrame 數(shù)據(jù),并用于繪制罐頭圖。
以下是一些本文沒有提到的可視化工具:
我們將利用 ggplot2 中的 diamonds 數(shù)據(jù)集,你可以在 Vincent Arelbundock's RDatasets 中找到它(pd.read_csv(' ') ),此外我們還需要檢測是否已經(jīng)安裝 feather 。
[站外圖片上傳中……(4)]
Bokeh 提供了兩個 API,一個是低級的 glyph API,另一個是高級的 Charts API。
[站外圖片上傳中……(5)]
還不是很清楚我們應該在啥時候利用 Bokeh 來進行探索性分析,不過它的交互式功能可以激發(fā)我的興趣。就個人而言,由于習慣問題我平時仍然一直使用 matplotlib 來繪圖,我還無法完全切換到 Bokeh 中。
我非常喜歡 Bokeh 的儀表盤功能和 bokeh server 的 webapps。
[站外圖片上傳中……(6)]
[站外圖片上傳中……(7)]
[站外圖片上傳中……(8)]
matplotlib 并不局限于處理 DataFrame 數(shù)據(jù),它支持所有使用 getitem 作為鍵值的數(shù)據(jù)類型。
[站外圖片上傳中……(9)]
[站外圖片上傳中……(10)]
我們從列變量的名字中提取出軸標簽,利用 Pandas 可以更加便捷地繪制一系列共享 x 軸數(shù)據(jù)的圖形。
[站外圖片上傳中……(11)]
[站外圖片上傳中……(12)]
本文中的剩余部分將重點介紹 seaborn和為什么我認為它是探索性分析的強大工具。
我強烈建議你閱讀 Seaborn 的 introductory notes,這上面介紹了 seaborn 的設計邏輯和應用領域。
我們可以通過一個穩(wěn)定的且易懂的 API 接口來調用 Seaborn。
事實上,seaborn 是基于 matplotlib 開發(fā)的,這意味著如果你熟悉 pyplot API的話,那么你可以很容易地掌握 seaborn。
大多數(shù) seaborn 繪圖函數(shù)的參數(shù)都由 x, y, hue, 和 data 構成(并不是所有的參數(shù)都是必須的)。如果你處理的對象是 DataFrame,那么你可以直接將列變量的名稱和數(shù)據(jù)集的名稱一同傳遞到繪圖函數(shù)中。
[站外圖片上傳中……(13)]
[站外圖片上傳中……(14)]
[站外圖片上傳中……(15)]
[站外圖片上傳中……(16)]
我們可以很輕易地探究兩個變量之間的關系:
[站外圖片上傳中……(17)]
[站外圖片上傳中……(18)]
或者一次探究多個變量之間的關系:
[站外圖片上傳中……(19)]
[站外圖片上傳中……(20)]
pariplot 是 PairGrid 的一個包裝函數(shù),它提供了 seaborn 一個重要的抽象功能——Grid。Seaborn 的 Grid 將 matplotlib 中Figure 和數(shù)據(jù)集中的變量聯(lián)系起來了。
我們有兩種方式可以和 grids 進行交互操作。其一,seaborn 提供了類似于 pairplot 的包裝函數(shù),它提前設置了許多常見任務的參數(shù);其二,如果你需要更多的自定義選項,那么你可以直接利用 Grid 方法。
[站外圖片上傳中……(21)]
[站外圖片上傳中……(22)]
[站外圖片上傳中……(23)]
34312 rows × 7 columns
[站外圖片上傳中……(24)]
[站外圖片上傳中……(25)]
FaceGrid 可以通過控制分面變量來生成 Grid圖形,其中PairGrid是它的一個特例。接下來的案例中,我們將以數(shù)據(jù)集中的 cut 變量為分面變量來繪制圖像:
[站外圖片上傳中……(26)]
[站外圖片上傳中……(27)]
最后一個案例展示了如何將 seaborn 和 matplotlib 結合起來。g.axes是matplotlib.Axes的一個數(shù)組,g.fig是matplotlib.Figure的一個特例。這是使用 seaborn 時常見的一個模式:利用 seaborn 的方法來繪制圖像,然后再利用 matplotlib 來調整細節(jié)部分。
我認為 seaborn 之所以吸引人是因為它的繪圖語法具有很強的靈活性。你不會被作者所設定的圖表類型所局限住,你可以根據(jù)自己的需要創(chuàng)建新的圖表。
[站外圖片上傳中……(28)]
[站外圖片上傳中……(29)]
[站外圖片上傳中……(30)]
[站外圖片上傳中……(31)]
本來,我打算準備更多的例子來介紹 seaborn,但是我會將相關鏈接分享給大家。Seaborn 的說明文檔寫的非常詳細。
最后,我們將結合 scikit-learn 來介紹如何利用 GridSearch 來尋找最佳參數(shù)。
[站外圖片上傳中……(32)]
[站外圖片上傳中……(33)]
[站外圖片上傳中……(34)]
原文鏈接:
譯者:Fibears
Plotly Express 是一個新的高級 Python 可視化庫:它是 Plotly.py 的高級封裝,它為復雜的圖表提供了一個簡單的語法。
受 Seaborn 和 ggplot2 的啟發(fā),它專門設計為具有簡潔,一致且易于學習的 API :只需一次導入,您就可以在一個函數(shù)調用中創(chuàng)建豐富的交互式繪圖,包括分面繪圖(faceting)、地圖、動畫和趨勢線。 它帶有數(shù)據(jù)集、顏色面板和主題,就像 Plotly.py 一樣。
Plotly Express 完全免費:憑借其寬松的開源 MIT 許可證,您可以隨意使用它(是的,甚至在商業(yè)產(chǎn)品中?。?。
最重要的是,Plotly Express 與 Plotly 生態(tài)系統(tǒng)的其他部分完全兼容:在您的 Dash 應用程序中使用它,使用 Orca 將您的數(shù)據(jù)導出為幾乎任何文件格式,或使用JupyterLab 圖表編輯器在 GUI 中編輯它們!
用 pip install plotly_express 命令可以安裝 Plotly Express。
一旦導入Plotly Express(通常是 px ),大多數(shù)繪圖只需要一個函數(shù)調用,接受一個整潔的Pandas dataframe,并簡單描述你想要制作的圖。 如果你想要一個基本的散點圖,它只是 px.scatter(data,x =“column_name”,y =“column_name”)。
以下是內置的 Gapminder 數(shù)據(jù)集的示例,顯示2007年按國家/地區(qū)的人均預期壽命和人均GDP 之間的趨勢:
如果你想通過大陸區(qū)分它們,你可以使用 color 參數(shù)為你的點著色,由 px 負責設置默認顏色,設置圖例等:
這里的每一點都是一個國家,所以也許我們想要按國家人口來衡量這些點...... 沒問題:這里也有一個參數(shù)來設置,它被稱為 size:
如果你好奇哪個國家對應哪個點? 可以添加一個 hover_name ,您可以輕松識別任何一點:只需將鼠標放在您感興趣的點上即可! 事實上,即使沒有 hover_name ,整個圖表也是互動的:
也可以通過 facet_col =”continent“ 來輕松劃分各大洲,就像著色點一樣容易,并且讓我們使用 x軸 對數(shù)(log_x)以便在我們在圖表中看的更清晰:
也許你不僅僅對 2007年 感興趣,而且你想看看這張圖表是如何隨著時間的推移而演變的。 可以通過設置 animation_frame=“year” (以及 animation_group =“country” 來標識哪些圓與控制條中的年份匹配)來設置動畫。
在這個最終版本中,讓我們在這里調整一些顯示,因為像“gdpPercap” 這樣的文本有點難看,即使它是我們的數(shù)據(jù)框列的名稱。 我們可以提供更漂亮的“標簽” (labels),可以在整個圖表、圖例、標題軸和懸停(hovers)中應用。 我們還可以手動設置邊界,以便動畫在整個過程中看起來更棒:
因為這是地理數(shù)據(jù),我們也可以將其表示為動畫地圖,因此這清楚地表明 Plotly Express 不僅僅可以繪制散點圖(不過這個數(shù)據(jù)集缺少前蘇聯(lián)的數(shù)據(jù))。
事實上,Plotly Express 支持三維散點圖、三維線形圖、極坐標和地圖上三元坐標以及二維坐標。 條形圖(Bar)有二維笛卡爾和極坐標風格。
進行可視化時,您可以使用單變量設置中的直方圖(histograms)和箱形圖(box)或小提琴圖(violin plots),或雙變量分布的密度等高線圖(density contours)。 大多數(shù)二維笛卡爾圖接受連續(xù)或分類數(shù)據(jù),并自動處理日期/時間數(shù)據(jù)。 可以查看我們的圖庫 (ref-3) 來了解每個圖表的例子。
數(shù)據(jù) 探索 的主要部分是理解數(shù)據(jù)集中值的分布,以及這些分布如何相互關聯(lián)。 Plotly Express 有許多功能來處理這些任務。
使用直方圖(histograms),箱形圖(box)或小提琴圖(violin plots)可視化單變量分布:
直方圖:
箱形圖:
小提琴圖:
還可以創(chuàng)建聯(lián)合分布圖(marginal rugs),使用直方圖,箱形圖(box)或小提琴來顯示雙變量分布,也可以添加趨勢線。 Plotly Express 甚至可以幫助你在懸停框中添加線條公式和R2值! 它使用 statsmodels 進行普通最小二乘(OLS)回歸或局部加權散點圖平滑(LOWESS)。
在上面的一些圖中你會注意到一些不錯的色標。 在 Plotly Express 中, px.colors 模塊包含許多有用的色標和序列:定性的、序列型的、離散的、循環(huán)的以及所有您喜歡的開源包:ColorBrewer、cmocean 和 Carto 。 我們還提供了一些功能來制作可瀏覽的樣本供您欣賞(ref-3):
定性的顏色序列:
眾多內置順序色標中的一部分:
我們特別為我們的交互式多維圖表感到自豪,例如散點圖矩陣(SPLOMS)、平行坐標和我們稱之為并行類別的并行集。 通過這些,您可以在單個圖中可視化整個數(shù)據(jù)集以進行數(shù)據(jù) 探索 。 在你的Jupyter 筆記本中查看這些單行及其啟用的交互:
散點圖矩陣(SPLOM)允許您可視化多個鏈接的散點圖:數(shù)據(jù)集中的每個變量與其他變量的關系。 數(shù)據(jù)集中的每一行都顯示為每個圖中的一個點。 你可以進行縮放、平移或選擇操作,你會發(fā)現(xiàn)所有圖都鏈接在一起!
平行坐標允許您同時顯示3個以上的連續(xù)變量。 dataframe 中的每一行都是一行。 您可以拖動尺寸以重新排序它們并選擇值范圍之間的交叉點。
并行類別是并行坐標的分類模擬:使用它們可視化數(shù)據(jù)集中多組類別之間的關系。
Plotly Express 之于 Plotly.py 類似 Seaborn 之于 matplotlib:Plotly Express 是一個高級封裝庫,允許您快速創(chuàng)建圖表,然后使用底層 API 和生態(tài)系統(tǒng)的強大功能進行修改。 對于Plotly 生態(tài)系統(tǒng),這意味著一旦您使用 Plotly Express 創(chuàng)建了一個圖形,您就可以使用Themes,使用 FigureWidgets 進行命令性編輯,使用 Orca 將其導出為幾乎任何文件格式,或者在我們的 GUI JupyterLab 圖表編輯器中編輯它 。
主題(Themes)允許您控制圖形范圍的設置,如邊距、字體、背景顏色、刻度定位等。 您可以使用模板參數(shù)應用任何命名的主題或主題對象:
有三個內置的 Plotly 主題可以使用, 分別是 plotly, plotlywhite 和 plotlydark。
px 輸出繼承自 Plotly.py 的 Figure 類 ExpressFigure 的對象,這意味著你可以使用任何 Figure 的訪問器和方法來改變 px生成的繪圖。 例如,您可以將 .update() 調用鏈接到 px 調用以更改圖例設置并添加注釋。 .update() 現(xiàn)在返回修改后的數(shù)字,所以你仍然可以在一個很長的 Python 語句中執(zhí)行此操作:
在這里,在使用 Plotly Express 生成原始圖形之后,我們使用 Plotly.py 的 API 來更改一些圖例設置并添加注釋。
Dash 是 Plotly 的開源框架,用于構建具有 Plotly.py 圖表的分析應用程序和儀表板。Plotly Express 產(chǎn)生的對象與 Dash 100%兼容,只需將它們直接傳遞到 dash_core_components.Graph,如下所示: dcc.Graph(figure = px.scatter(...))。 這是一個非常簡單的 50行 Dash 應用程序的示例,它使用 px 生成其中的圖表:
這個 50 行的 Dash 應用程序使用 Plotly Express 生成用于瀏覽數(shù)據(jù)集的 UI 。
可視化數(shù)據(jù)有很多原因:有時您想要提供一些想法或結果,并且您希望對圖表的每個方面施加很多控制,有時您希望快速查看兩個變量之間的關系。 這是交互與 探索 的范疇。
Plotly.py 已經(jīng)發(fā)展成為一個非常強大的可視化交互工具:它可以讓你控制圖形的幾乎每個方面,從圖例的位置到刻度的長度。 不幸的是,這種控制的代價是冗長的:有時可能需要多行 Python 代碼才能用 Plotly.py 生成圖表。
我們使用 Plotly Express 的主要目標是使 Plotly.py 更容易用于 探索 和快速迭代。
我們想要構建一個庫,它做出了不同的權衡:在可視化過程的早期犧牲一些控制措施來換取一個不那么詳細的 API,允許你在一行 Python 代碼中制作各種各樣的圖表。 然而,正如我們上面所示,該控件并沒有消失:你仍然可以使用底層的 Plotly.py 的 API 來調整和優(yōu)化用 Plotly Express 制作的圖表。
支持這種簡潔 API 的主要設計決策之一是所有 Plotly Express 的函數(shù)都接受“整潔”的 dataframe 作為輸入。 每個 Plotly Express 函數(shù)都體現(xiàn)了dataframe 中行與單個或分組標記的清晰映射,并具有圖形啟發(fā)的語法簽名,可讓您直接映射這些標記的變量,如 x 或 y 位置、顏色、大小、 facet-column 甚至是 動畫幀到數(shù)據(jù)框(dataframe)中的列。 當您鍵入 px.scatter(data,x ='col1',y='col2') 時,Plotly Express 會為數(shù)據(jù)框中的每一行創(chuàng)建一個小符號標記 - 這就是 px.scatter 的作用 - 并將 “col1” 映射到 x 位置(類似于 y 位置)。 這種方法的強大之處在于它以相同的方式處理所有可視化變量:您可以將數(shù)據(jù)框列映射到顏色,然后通過更改參數(shù)來改變您的想法并將其映射到大小或進行行分面(facet-row)。
接受整個整潔的 dataframe 的列名作為輸入(而不是原始的 numpy 向量)也允許 px 為你節(jié)省大量的時間,因為它知道列的名稱,它可以生成所有的 Plotly.py 配置用于標記圖例、軸、懸???、構面甚至動畫幀。 但是,如上所述,如果你的 dataframe 的列被笨拙地命名,你可以告訴 px 用每個函數(shù)的 labels 參數(shù)替換更好的。
僅接受整潔輸入所帶來的最終優(yōu)勢是它更直接地支持快速迭代:您整理一次數(shù)據(jù)集,從那里可以使用 px 創(chuàng)建數(shù)十種不同類型的圖表,包括在 SPLOM 中可視化多個維度 、使用平行坐標、在地圖上繪制,在二維、三維極坐標或三維坐標中使用等,所有這些都不需要重塑您的數(shù)據(jù)!
在 API 級別,我們在 px 中投入了大量的工作,以確保所有參數(shù)都被命名,以便在鍵入時最大限度地發(fā)現(xiàn):所有 scatter -類似的函數(shù)都以 scatter 開頭(例如 scatter_polar, scatter_ternary)所以你可以通過自動補全來發(fā)現(xiàn)它們。 我們選擇拆分這些不同的散點圖函數(shù),因此每個散點圖函數(shù)都會接受一組定制的關鍵字參數(shù),特別是它們的坐標系。 也就是說,共享坐標系的函數(shù)集(例如 scatter, line & bar,或 scatter_polar, line_polar 和 bar_polar )也有相同的參數(shù),以最大限度地方便學習。 我們還花了很多精力來提出簡短而富有表現(xiàn)力的名稱,這些名稱很好地映射到底層的 Plotly.py 屬性,以便于在工作流程中稍后調整到交互的圖表中。
最后,Plotly Express 作為一個新的 Python 可視化庫,在 Plotly 生態(tài)系統(tǒng)下,將會迅速發(fā)展。所以不要猶豫,立即開始使用 Plotly Express 吧!