用Python的Plotly畫出炫酷的數據可視化(含各類圖介紹)

2021-02-20 數據分析1480

在談及數據可視化的時候,我們通常都會使用到matplotlylib,pyecharts這些可視化的手段。但是,今天我主要來介紹Plotly這款可視化的庫。大家參考開源項目地址:

https://github.com/plotly/plotly.js這個庫是使用js寫的前端,所以畫出來的圖非常的漂亮,不像matplotlylib畫出來的那麼生硬。plotly提供了Python的支持庫,使用pip直接安裝就可以:

在python裡面使用plotly畫圖非常的簡單,我們先來看一個簡單的柱狀圖例子:

import plotly.graph_objects as go
animals=['giraffes', 'orangutans', 'monkeys']

fig = go.Figure(data=[
    go.Bar(name='SF Zoo', x=animals, y=[20, 14, 23]),
    go.Bar(name='LA Zoo', x=animals, y=[12, 18, 29])
])
# Change the bar mode
fig.update_layout(barmode='group')
fig.show()


使用起來非常的方便,和matplotlylib畫圖步驟很像,下面我們再來看看一組關於個性化顯示的例子:利用plotly express自帶的數據集,畫一個簡單的柱狀圖:

import plotly.express as px
data_canada = px.data.gapminder().query("country == 'Canada'")
fig = px.bar(data_canada, x='year', y='pop')
fig.show()

這樣的圖看上去還是比較素,我們可以使用參數來自定義條形圖的樣式:

import plotly.express as px
data = px.data.gapminder()

data_canada = data[data.country == 'Canada']
fig = px.bar(data_canada, x='year', y='pop',
             hover_data=['lifeExp', 'gdpPercap'], color='lifeExp',
             labels={'pop':'population of Canada'}, height=400)
fig.show()

調整樣式後會明顯發現數據展示會友好很多,能夠清楚的看到數據的增長程度。除了柱狀圖之外還有其他的散點圖,折線圖,餅狀圖,條形圖,箱型圖等等(也包含一些熱圖,登高圖,地圖分布等等)。

下面,我們使用Python畫一些Plolty基本圖的Demo:
散點圖核心的價值在於發現變量之間的關係,千萬不要簡單地將這個關係理解為線性回歸關係。變量間的關係有很多,如線性關係、指數關係、對數關係等等,當然,沒有關係也是一種重要的關係。散點圖更偏向於研究型圖表,能讓我們發現變量之間隱藏的關係為我們決策作出重要的引導作用。

import plotly.express as px
fig = px.scatter(x=[0, 1, 2, 3, 4], y=[0, 1, 4, 9, 16])
fig.show()

import plotly.express as px
df = px.data.iris() # px自帶數據集
fig = px.scatter(df, x="sepal_width", y="sepal_length", color="species",
                 size='petal_length', hover_data=['petal_width'])
fig.show()

折線圖

折線圖可以顯示隨時間(根據常用比例設置)而變化的連續數據,因此非常適用於顯示在相等時間間隔下數據的趨勢。比如我們經常看到的監控數據圖,一般都是折線圖。

import plotly.graph_objects as go
animals = ['giraffes', 'orangutans', 'monkeys']

fig = go.Figure(data=[
    go.Scatter(name='SF Zoo', x=animals, y=[20, 14, 23]),
    go.Scatter(name='LA Zoo', x=animals, y=[12, 18, 29])
])
fig.show()

import plotly.graph_objects as go
import numpy as np
np.random.seed(1)

N = 100
random_x = np.linspace(0, 1, N)
random_y0 = np.random.randn(N) + 5
random_y1 = np.random.randn(N)
random_y2 = np.random.randn(N) - 5

# Create traces
fig = go.Figure()
fig.add_trace(go.Scatter(x=random_x, y=random_y0,
                    mode='lines',
                    name='lines'))
fig.add_trace(go.Scatter(x=random_x, y=random_y1,
                    mode='lines+markers',
                    name='lines+markers'))
fig.add_trace(go.Scatter(x=random_x, y=random_y2,
                    mode='markers', name='markers'))

fig.show()

餅圖主要用於總體中各組成部分所佔比重的研究,可以很直觀地分析項目的組成結構與比重,一目了然地進行描述重量分成。比如我們統計各種開銷佔總支出多少的時候,這個時候使用餅圖可以很明顯看出開銷的大頭。

import plotly.express as px
# This dataframe has 244 lines, but 4 distinct values for `day`
df = px.data.tips()
fig = px.pie(df, values='tip', names='day')
fig.show()

import plotly.express as px# plotly的自帶數據集,類型:DataFrame

df = px.data.gapminder().query("year == 2007").query("continent == 'Europe'")
df.loc[df['pop'] < 2.e6, 'country'] = 'Other countries' # Represent only large countries
fig = px.pie(df, values='pop', names='country', title='Population of European continent')
fig.show()

矩形樹圖適合展現具有層級關係的數據,能夠直觀體現同級之間的比較。一個Tree狀結構轉化為平面空間矩形的狀態,就像一張地圖,指引我們發現探索數據背後的故事。

矩形樹圖採用矩形表示層次結構裡的節點,父子節點之間的層次關係用矩形之間的相互嵌套隱喻來表達。從根節點開始,屏幕空間根據相應的子節點數目被分為多個矩形,矩形的面積大小通常對應節點的屬性。每個矩形又按照相應節點的子節點遞歸的進行分割,知道葉子節點為止。

import plotly.express as px
fig = px.treemap(
    names = ["Eve","Cain", "Seth", "Enos", "Noam", "Abel", "Awan", "Enoch", "Azura"],
    parents = ["", "Eve", "Eve", "Seth", "Seth", "Eve", "Eve", "Awan", "Eve"]
)
fig.show()

和縱向柱狀圖一樣,都是用來列舉和比較多個個體之間的差值,通過柱狀圖的長短可以很明顯看出數據之間的差別。

import plotly.graph_objects as go
# 修改水平參數即可
fig = go.Figure(go.Bar(
            x=[20, 14, 23],
            y=['giraffes', 'orangutans', 'monkeys'],
            orientation='h'))

fig.show()

箱型圖

箱形圖(Box-plot)又稱為盒式圖或箱線圖,是一種用作顯示一組數據分散情況資料的統計圖。因形狀如箱子而得名。在各種領域也經常被使用,常見於品質管理。它主要用於反映原始數據分布的特徵,還可以進行多組數據分布特徵的比較。

import plotly.express as px
df = px.data.tips()
fig = px.box(df, x="time", y="total_bill")
fig.show()

有二維、三維等高線圖。在數據分析中,高度表示為該點的數量或出現次數,該指標相同則在一條環線(或高度)處。

import plotly.graph_objects as go

fig = go.Figure(data =
    go.Contour(
        z=[[10, 10.625, 12.5, 15.625, 20],
           [5.625, 6.25, 8.125, 11.25, 15.625],
           [2.5, 3.125, 5., 8.125, 12.5],
           [0.625, 1.25, 3.125, 6.25, 10.625],
           [0, 0.625, 2.5, 5.625, 10]]
    ))
fig.show()

熱圖是指用熱譜圖展示用戶在網站上的行為。瀏覽量大、點擊量大的地方呈紅色,瀏覽量小、點擊量少的地方呈無色、藍色。常見熱圖共有點擊熱圖、注意力熱圖、分析熱圖、對比熱圖、分享熱圖、浮層熱圖和歷史熱圖等七種。

import plotly.express as px
data=[[1, 25, 30, 50, 1], [20, 1, 60, 80, 30], [30, 60, 1, 5, 20]]
fig = px.imshow(data,
                labels=dict(x="Day of Week", y="Time of Day", color="Productivity"),
                x=['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'],
                y=['Morning', 'Afternoon', 'Evening']
               )
fig.update_xaxes(side="top")
fig.show()

三元圖,又稱三元相圖(Ternary plot)有三個坐標軸,它的三個坐標軸「首尾相接」成夾角為60度的等邊三角形。「元」即成分,或部分,三元圖主要用來展示不同樣本的三種成分的比例,在物理化學中比較常見。

import plotly.express as px
df = px.data.election()
fig = px.scatter_ternary(df, a="Joly", b="Coderre", c="Bergeron")
fig.show()

雷達圖以二維的形式展現了多維數據,使觀察者可以一目了然地得知對象在各種指標上的強弱,最典型的就是遊戲中衡量一個角色多維度的能力值。

import plotly.express as px
import pandas as pd
df = pd.DataFrame(dict(
    r=[1, 5, 2, 2, 3],
    theta=['processing cost','mechanical properties','chemical stability',
           'thermal stability', 'device integration']))
fig = px.line_polar(df, r='r', theta='theta', line_close=True)
fig.show()

極坐標圖主要作用就是可在一張圖上繪出整個頻率域的頻率響應特性。

import plotly.express as px
df = px.data.wind()
fig = px.scatter_polar(df, r="frequency", theta="direction")
fig.show()

瀑布圖,因為形似瀑布流水而稱之為瀑布圖( Waterfall Plot)。此種圖表採用絕對值與相對值結合的方式,適用於表達數個特定數值之間的數量變化關係。

import plotly.graph_objects as go

fig = go.Figure(go.Waterfall(
    name = "20", orientation = "v",
    measure = ["relative", "relative", "total", "relative", "relative", "total"],
    x = ["Sales", "Consulting", "Net revenue", "Purchases", "Other expenses", "Profit before tax"],
    textposition = "outside",
    text = ["+60", "+80", "", "-40", "-20", "Total"],
    y = [60, 80, 0, -40, -20, 0],
    connector = {"line":{"color":"rgb(63, 63, 63)"}},
))

fig.update_layout(
        title = "Profit and loss statement 2020",
        showlegend = True
)

fig.show()

漏鬥圖

一般表述轉化率(如營銷客戶轉化),由上而下代表不同層級,轉化率逐級降低並形成漏鬥形狀。

import plotly.express as px
data = dict(
    number=[39, 27.4, 20.6, 11, 2],
    stage=["Website visit", "Downloads", "Potential customers", "Requested price", "invoice sent"])
fig = px.funnel(data, x='number', y='stage')
fig.show()

氣泡分布圖(含配置底圖)

import plotly.express as px
df = px.data.gapminder().query("year==2007")
fig = px.scatter_geo(df, locations="iso_alpha", color="continent",
                     hover_name="country", size="pop",
                     projection="natural earth")
fig.show()

當然,除此之外,還有其他種類的圖,如果大家對plotly感興趣可以去訪問它的網站:https://plotly.com/python/statistical-charts/

相關焦點

  • 數據可視化神器——Plotly
    數據分析離不開數據可視化。比如我們前面介紹過pandas畫圖,matplotlib畫圖,pyecharts畫圖當然還有Tableau,今天推薦一款更牛的可視化神器,主要是這款神器的畫出來的圖很漂亮,色彩太酷了。
  • 數據科學系列:plotly可視化入門介紹
    在這5個工具包中,用於數據繪圖的有2.5個(Pandas可以算0.5個),佔比之高定與當時一度"沉迷"於簡單而有效的可視化有關,可謂樂此不疲。時隔一年有餘,在不斷接觸了Plotly這個可視化新貴之後,近期終於正式學習了一下這個包的使用、特性及優劣,並稍作整理、以資後鑑,遂成此文!plotly繪圖簡潔高效可交互,值得一試!plot
  • Python 可視化神器--Plotly
    學習Python是做數分析的最基礎的一步,數據分析離不開數據可視化。Python第三方庫中我們最常用的可視化庫是 pandas,matplotlib,pyecharts,當然還有 Tableau,另外最近在學習過程中發現另一款可視化神器-Plotly,它是一款用來做數據分析和可視化的在線平臺,功能非常強大,可以在線繪製很多圖形比如條形圖、散點圖、餅圖、直方圖等等。
  • 用一行 Python 代碼搞定炫酷可視化
    ,首發自Python數據科學前言學過Python數據分析的朋友都知道,在可視化的工具中,有很多優秀的三方庫,比如matplotlib,seaborn,plotly,Boken,pyecharts等等。這些可視化庫都有自己的特點,在實際應用中也廣為大家使用。plotly、Boken等都是交互式的可視化工具,結合Jupyter notebook可以非常靈活方便地展現分析後的結果。雖然做出的效果非常的炫酷,比如plotly,但是每一次都需要寫很長的代碼,一是麻煩,二是不便於維護。我覺得在數據的分析階段,更多的時間應該放在分析上,維度選擇、拆解合併,業務理解和判斷。
  • 炫酷可視化教程 Cufflinks 來啦!!!
    數據之道」,選擇「星標公眾號」收藏文章的同時,不要忘記「在看」炫酷可視化教程 Cufflinks 來啦前言學過Python數據分析的朋友都知道,在可視化的工具中,有很多優秀的三方庫,比如matplotlib
  • Python一行代碼搞定炫酷可視化,Cufflinks值得擁有
    前言學過Python數據分析的朋友都知道,在可視化的工具中,有很多優秀的三方庫,比如matplotlib,seaborn,plotly,Boken,pyecharts等等。這些可視化庫都有自己的特點,在實際應用中也廣為大家使用。plotly、Boken等都是交互式的可視化工具,結合Jupyter notebook可以非常靈活方便地展現分析後的結果。雖然做出的效果非常的炫酷,比如plotly,但是每一次都需要寫很長的代碼,一是麻煩,二是不便於維護。我覺得在數據的分析階段,更多的時間應該放在分析上,維度選擇、拆解合併,業務理解和判斷。
  • Python技能 | 炫酷的可視化工具包-cufflinks
    前言學過Python數據分析的朋友都知道,在可視化的工具中,有很多優秀的三方庫,比如matplotlib,seaborn,plotly,Boken
  • 高可用數據可視化神器plotly_express詳解
    plotly_express極大地簡化了數據可視化的工作量,解放了分析人員的工作。安裝命令為:pip install plotly_express安裝成功截圖如下:首先是一些基礎的介紹內容,如下所示:from __future__ import division"""__Author__:沂水寒城功能:plotly_express 數據可視化實踐官方API說明:  https://plot.ly/python-api-reference/plotly.express.html
  • 可視化神器plotly
    其功能強大到不僅與多個主流繪圖軟體的對接,而且還可以像Excel那樣實現交互式製圖,而且圖表種類齊全,並可以實現在線分享以及開源,等等;這種功能強大到還沒有一個人能夠完全掌握其全部應用,甚至國內對它的介紹使用也僅僅只是其中一部分。接下來筆者對plotly的一些隱藏功能進行介紹,並部分以python的使用來簡單說明。
  • 推薦收藏 | Python一行代碼搞定炫酷可視化,Cufflinks了解一下
    數據分析的朋友都知道,在可視化的工具中,有很多優秀的三方庫,比如matplotlib,seaborn,plotly,Boken,pyecharts等等。這些可視化庫都有自己的特點,在實際應用中也廣為大家使用。plotly、Boken等都是交互式的可視化工具,結合Jupyter notebook可以非常靈活方便地展現分析後的結果。雖然做出的效果非常的炫酷,比如plotly,但是每一次都需要寫很長的代碼,一是麻煩,二是不便於維護。我覺得在數據的分析階段,更多的時間應該放在分析上,維度選擇、拆解合併,業務理解和判斷。
  • Python一行代碼搞定炫酷可視化,你需要了解一下Cufflinks
    數據科學禁止二次轉載前言學過Python數據分析的朋友都知道,在可視化的工具中,有很多優秀的三方庫,比如matplotlib,seaborn,plotly,Boken,pyecharts等等。這些可視化庫都有自己的特點,在實際應用中也廣為大家使用。plotly、Boken等都是交互式的可視化工具,結合Jupyter notebook可以非常靈活方便地展現分析後的結果。雖然做出的效果非常的炫酷,比如plotly,但是每一次都需要寫很長的代碼,一是麻煩,二是不便於維護。我覺得在數據的分析階段,更多的時間應該放在分析上,維度選擇、拆解合併,業務理解和判斷。
  • Plotly 可視化介紹
    Plotly 可視化介紹數據可視化平臺 Plotly 開源旗下強大的 JavaScript 圖表庫,支持三種不同類型的圖表
  • 最強的Python可視化神器,建議一試!
    數據分析離不開數據可視化,我們最常用的就是pandas,matplotlib,pyecharts當然還有Tableau,看到一篇文章介紹plotly製圖後我也躍躍欲試
  • 【Python教程】用Python進行數據可視化
    在本文中,我將介紹如何開始使用Python和matplotlib、seaborn兩個庫對數據進行可視化。下面我們就用上面這個簡單的數據集作為例子,展示用 Python 做出9種可視化效果,並附有相關代碼。
  • Python可視化 | Python可視化進階必備 - plotly
    一、簡介Plotly是一個非常著名且強大的開源數據可視化框架,它通過構建基於瀏覽器顯示的web形式的可交互圖表來展示信息,可創建多達數十種精美的圖表和地圖,本文就將以jupyter notebook為開發工具,詳細介紹Plotly的基礎內容。
  • 用 Python 教你畫花樣圖
    文 | 潮汐來源:Python 技術「ID: pythonall」在之前的一篇文章Python可視化神器-Plotly動畫展示展現了可視化神器-Plotly的動畫的基本應用,本文介紹如何在Python中使用 Plotly 創建地圖並在地圖上標相應的線。
  • Python 5個數據可視化工具
    Plotly基於plotly.js,而plotly.js又基於D3.js,因此它是一個高級圖表庫,與Bokeh一樣,Plotly的 強項是製作交互式圖 ,有超過30種圖表類型, 提供了一些在大多數庫中沒有的圖表 ,如等高線圖、樹狀圖、科學圖表、統計圖表、3D圖表、金融圖表等。plotly最棒的一點是可以在Jupyter筆記本或獨立的HTML頁面中使用 。
  • python簡單進階之數據可視化:Plotly Express使用教程
    這是簡單進階教程系列第三篇,本系列文章主要介紹那些可以很快上手的進階庫。說起數據可視化,大多數人第一反應是matplotlib,我以前也嘗試過。但是,一方面是matplotlib設置稍微有點複雜,另一方面是它有點醜(也可能是我不會調),思來想去還不如直接用excel作圖呢,於是一直也沒有python作過圖。
  • 為什麼plotly被稱為「有史以來最牛逼」可視化神器?
    ,曾被網友稱為「有史以來最牛逼」可視化神器(具體無從考據,只是在搜索資料時看到的),為何有如此稱號?其功能強大到不僅與多個主流繪圖軟體的對接,而且還可以像Excel那樣實現交互式製圖,而且圖表種類齊全,並可以實現在線分享以及開源,等等;這種功能強大到還沒有一個人能夠完全掌握其全部應用,甚至國內對它的介紹使用也僅僅只是其中一部分。接下來筆者對plotly的一些隱藏功能進行介紹,並部分以python的使用來簡單說明。
  • 又一個Python可視化神器Plotly_Express!
    高級可視化神器Plotly_Express快速入門Plotly_Express是新一代的高級可視化神器,它是plotly.py的高級封裝,內置了大量實用、現代的繪圖模板。使用者只需要調用簡單的API函數,便可快速地生成漂亮的動態可視化圖表;同時其內置了很多的數據集,方便自行調用,快速模擬作圖。