1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        用Plotly畫出炫酷的數(shù)據(jù)可視化圖表

        共 11281字,需瀏覽 23分鐘

         ·

        2021-02-12 11:35


        大家好,歡迎來到 Crossin的編程教室 !

        在談及數(shù)據(jù)可視化的時(shí)候,我們通常都會(huì)使用到matplotlylib,pyecharts這些可視化的手段。今天我們來介紹另一款同樣優(yōu)秀的可視化庫(kù):
        Plotly

        開源項(xiàng)目地址:
        https://github.com/plotly/plotly.js


        這個(gè)庫(kù)是使用js寫的前端,所以畫出來的圖非常的漂亮,不像matplotlylib畫出來的那么生硬。plotly提供了Python的支持庫(kù),使用pip直接安裝就可以:

        pip install plotly

        在python里面使用plotly畫圖非常的簡(jiǎn)單,我們先來看一個(gè)簡(jiǎn)單的柱狀圖例子:

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

        fig = go.Figure(data=[
            go.Bar(name='SF Zoo', x=animals, y=[201423]),
            go.Bar(name='LA Zoo', x=animals, y=[121829])
        ])
        # Change the bar mode
        fig.update_layout(barmode='group')
        fig.show()



        使用起來非常的方便,和matplotlylib畫圖步驟很像。


        下面我們?cè)賮砜纯匆唤M關(guān)于個(gè)性化顯示的例子。

        利用plotly express自帶的數(shù)據(jù)集,畫一個(gè)簡(jiǎn)單的柱狀圖:

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


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

        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()



        調(diào)整樣式后會(huì)明顯發(fā)現(xiàn)數(shù)據(jù)展示會(huì)友好很多,能夠清楚的看到數(shù)據(jù)的增長(zhǎng)程度。

        除了柱狀圖之外還有其他的散點(diǎn)圖,折線圖,餅狀圖,條形圖,箱型圖等等(也包含一些熱圖,登高圖,地圖分布等等)。

        下面,我們使用Python畫一些Plolty基本圖的Demo:
        (大家如果有需要用Plotly的建議收藏哦?。?/span>


        散點(diǎn)圖

        散點(diǎn)圖核心的價(jià)值在于發(fā)現(xiàn)變量之間的關(guān)系,千萬不要簡(jiǎn)單地將這個(gè)關(guān)系理解為線性回歸關(guān)系。變量間的關(guān)系有很多,如線性關(guān)系、指數(shù)關(guān)系、對(duì)數(shù)關(guān)系等等,當(dāng)然,沒有關(guān)系也是一種重要的關(guān)系。散點(diǎn)圖更偏向于研究型圖表,能讓我們發(fā)現(xiàn)變量之間隱藏的關(guān)系為我們決策作出重要的引導(dǎo)作用。

        import plotly.express as px
        fig = px.scatter(x=[01234], y=[014916])
        fig.show()



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



        折線圖

        折線圖可以顯示隨時(shí)間(根據(jù)常用比例設(shè)置)而變化的連續(xù)數(shù)據(jù),因此非常適用于顯示在相等時(shí)間間隔下數(shù)據(jù)的趨勢(shì)。比如我們經(jīng)??吹降谋O(jiān)控?cái)?shù)據(jù)圖,一般都是折線圖。


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

        fig = go.Figure(data=[
            go.Scatter(name='SF Zoo', x=animals, y=[201423]),
            go.Scatter(name='LA Zoo', x=animals, y=[121829])
        ])
        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()



        餅圖

        餅圖主要用于總體中各組成部分所占比重的研究,可以很直觀地分析項(xiàng)目的組成結(jié)構(gòu)與比重,一目了然地進(jìn)行描述重量分成。比如我們統(tǒng)計(jì)各種開銷占總支出多少的時(shí)候,這個(gè)時(shí)候使用餅圖可以很明顯看出開銷的大頭。

        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的自帶數(shù)據(jù)集,類型: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()



        TreeMap(矩形樹圖)

        矩形樹圖適合展現(xiàn)具有層級(jí)關(guān)系的數(shù)據(jù),能夠直觀體現(xiàn)同級(jí)之間的比較。一個(gè)Tree狀結(jié)構(gòu)轉(zhuǎn)化為平面空間矩形的狀態(tài),就像一張地圖,指引我們發(fā)現(xiàn)探索數(shù)據(jù)背后的故事。


        矩形樹圖采用矩形表示層次結(jié)構(gòu)里的節(jié)點(diǎn),父子節(jié)點(diǎn)之間的層次關(guān)系用矩形之間的相互嵌套隱喻來表達(dá)。從根節(jié)點(diǎn)開始,屏幕空間根據(jù)相應(yīng)的子節(jié)點(diǎn)數(shù)目被分為多個(gè)矩形,矩形的面積大小通常對(duì)應(yīng)節(jié)點(diǎn)的屬性。每個(gè)矩形又按照相應(yīng)節(jié)點(diǎn)的子節(jié)點(diǎn)遞歸的進(jìn)行分割,知道葉子節(jié)點(diǎn)為止。


        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()



        水平柱狀圖

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

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

        fig.show()


        箱型圖

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

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


        等高線

        有二維、三維等高線圖。在數(shù)據(jù)分析中,高度表示為該點(diǎn)的數(shù)量或出現(xiàn)次數(shù),該指標(biāo)相同則在一條環(huán)線(或高度)處。

        import plotly.graph_objects as go

        fig = go.Figure(data =
            go.Contour(
                z=[[1010.62512.515.62520],
                   [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()




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

        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)有三個(gè)坐標(biāo)軸,它的三個(gè)坐標(biāo)軸“首尾相接”成夾角為60度的等邊三角形?!霸奔闯煞郑虿糠?,三元圖主要用來展示不同樣本的三種成分的比例,在物理化學(xué)中比較常見。

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



        雷達(dá)圖

        雷達(dá)圖以二維的形式展現(xiàn)了多維數(shù)據(jù),使觀察者可以一目了然地得知對(duì)象在各種指標(biāo)上的強(qiáng)弱,最典型的就是游戲中衡量一個(gè)角色多維度的能力值。

        import plotly.express as px
        import pandas as pd
        df = pd.DataFrame(dict(
            r=[15223],
            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()




        極坐標(biāo)圖

        極坐標(biāo)圖主要作用就是可在一張圖上繪出整個(gè)頻率域的頻率響應(yīng)特性。

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



        瀑布圖

        瀑布圖,因?yàn)樾嗡破俨剂魉Q之為瀑布圖( Waterfall Plot)。此種圖表采用絕對(duì)值與相對(duì)值結(jié)合的方式,適用于表達(dá)數(shù)個(gè)特定數(shù)值之間的數(shù)量變化關(guān)系。

        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 = [60800-40-200],
            connector = {"line":{"color":"rgb(63, 63, 63)"}},
        ))

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

        fig.show()



        漏斗圖


        一般表述轉(zhuǎn)化率(如營(yíng)銷客戶轉(zhuǎn)化),由上而下代表不同層級(jí),轉(zhuǎn)化率逐級(jí)降低并形成漏斗形狀。


        import plotly.express as px
        data = dict(
            number=[3927.420.6112],
            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()



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


        以上便是對(duì) Plotly 的簡(jiǎn)單介紹。

        如果文章對(duì)你有幫助,歡迎轉(zhuǎn)發(fā)/點(diǎn)贊/收藏!


        作者:我被狗咬了
        來源:Python亂燉


        _往期文章推薦_

        數(shù)據(jù)可視化,值得關(guān)注的30個(gè)技巧




        瀏覽 104
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            www操com | 免费观看黄色在线视频 | 娇妻互换享受高潮嗷嗷叫口述 | 日本不卡一区二区 | 黄色特一级片 | 成人久久久电影 | 7m精品福利视频导航 | 美女露隐私网站 | 欧美精品三级片在线 | 国产精品爱久久久久久久威尼斯 |