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>

        8個(gè)流行的Python可視化工具包,你喜歡哪個(gè)?

        共 10942字,需瀏覽 22分鐘

         ·

        2021-03-08 09:38

        來源:機(jī)器之心  作者:Aaron Frederick

        參與:李詩(shī)萌、王淑婷

        喜歡用 Python 做項(xiàng)目的小伙伴不免會(huì)遇到這種情況:做圖表時(shí),用哪種好看又實(shí)用的可視化工具包呢?之前文章里出現(xiàn)過漂亮的圖表時(shí),也總有讀者在后臺(tái)留言問該圖表時(shí)用什么工具做的。下面,作者介紹了八種在 Python 中實(shí)現(xiàn)的可視化工具包,其中有些包還能用在其它語(yǔ)言中??靵碓囋嚹阆矚g哪個(gè)?

        用 Python 創(chuàng)建圖形的方法有很多,但是哪種方法是最好的呢?當(dāng)我們做可視化之前,要先明確一些關(guān)于圖像目標(biāo)的問題:你是想初步了解數(shù)據(jù)的分布情況?想展示時(shí)給人們留下深刻印象?也許你想給某人展示一個(gè)內(nèi)在的形象,一個(gè)中庸的形象?

        本文將介紹一些常用的 Python 可視化包,包括這些包的優(yōu)缺點(diǎn)以及分別適用于什么樣的場(chǎng)景。這篇文章只擴(kuò)展到 2D 圖,為下一次講 3D 圖和商業(yè)報(bào)表(dashboard)留了一些空間,不過這次要講的包中,許多都可以很好地支持 3D 圖和商業(yè)報(bào)表。

        Matplotlib、Seaborn 和 Pandas

        把這三個(gè)包放在一起有幾個(gè)原因:首先 Seaborn 和 Pandas 是建立在 Matplotlib 之上的,當(dāng)你在用 Seaborn 或 Pandas 中的 df.plot() 時(shí),用的其實(shí)是別人用 Matplotlib 寫的代碼。因此,這些圖在美化方面是相似的,自定義圖時(shí)用的語(yǔ)法也都非常相似。

        當(dāng)提到這些可視化工具時(shí),我想到三個(gè)詞:探索(Exploratory)、數(shù)據(jù)(Data)、分析(Analysis)。這些包都很適合第一次探索數(shù)據(jù),但要做演示時(shí)用這些包就不夠了。

        Matplotlib 是比較低級(jí)的庫(kù),但它所支持的自定義程度令人難以置信(所以不要簡(jiǎn)單地將其排除在演示所用的包之外!),但還有其它更適合做展示的工具。

        Matplotlib 還可以選擇樣式(style selection),它模擬了像 ggplot2 和 xkcd 等很流行的美化工具。下面是我用 Matplotlib 及相關(guān)工具所做的示例圖:

        在處理籃球隊(duì)薪資數(shù)據(jù)時(shí),我想找出薪資中位數(shù)最高的團(tuán)隊(duì)。為了展示結(jié)果,我將每個(gè)球隊(duì)的工資用顏色標(biāo)成條形圖,來說明球員加入哪一支球隊(duì)才能獲得更好的待遇。
        import seaborn as sns
        import matplotlib.pyplot as plt

        color_order = ['xkcd:cerulean''xkcd:ocean',
                        'xkcd:black','xkcd:royal purple',
                        'xkcd:royal purple''xkcd:navy blue',
                        'xkcd:powder blue''xkcd:light maroon'
                        'xkcd:lightish blue','xkcd:navy']

        sns.barplot(x=top10.Team,
                    y=top10.Salary,
                    palette=color_order).set_title('Teams with Highest Median Salary')

        plt.ticklabel_format(style='sci', axis='y', scilimits=(0,0))


        第二個(gè)圖是回歸實(shí)驗(yàn)殘差的 Q-Q 圖。這張圖的主要目的是展示如何用盡量少的線條做出一張有用的圖,當(dāng)然也許它可能不那么美觀。
        import matplotlib.pyplot as plt
        import scipy.stats as stats

        #model2 is a regression model
        log_resid = model2.predict(X_test)-y_test
        stats.probplot(log_resid, dist="norm", plot=plt)
        plt.title("Normal Q-Q plot")
        plt.show()



        最終證明,Matplotlib 及其相關(guān)工具的效率很高,但就演示而言它們并不是最好的工具。

        ggplot(2)

        你可能會(huì)問,「Aaron,ggplot 是 R 中最常用的可視化包,但你不是要寫 Python 的包嗎?」。人們已經(jīng)在 Python 中實(shí)現(xiàn)了 ggplot2,復(fù)制了這個(gè)包從美化到語(yǔ)法的一切內(nèi)容。

        在我看過的所有材料中,它的一切都和 ggplot2 很像,但這個(gè)包的好處是它依賴于 Pandas Python 包。不過 Pandas Python 包最近棄用了一些方法,導(dǎo)致 Python 版本不兼容。

        如果你想在 R 中用真正的 ggplot(除了依賴關(guān)系外,它們的外觀、感覺以及語(yǔ)法都是一樣的),我在另外一篇文章中對(duì)此進(jìn)行過討論。

        也就是說,如果你一定要在 Python 中用 ggplot,那你就必須要安裝 0.19.2 版的 Pandas,但我建議你最好不要為了使用較低級(jí)的繪圖包而降低 Pandas 的版本。

        ggplot2(我覺得也包括 Python 的 ggplot)舉足輕重的原因是它們用「圖形語(yǔ)法」來構(gòu)建圖片?;厩疤崾悄憧梢詫?shí)例化圖,然后分別添加不同的特征;也就是說,你可以分別對(duì)標(biāo)題、坐標(biāo)軸、數(shù)據(jù)點(diǎn)以及趨勢(shì)線等進(jìn)行美化。

        下面是 ggplot 代碼的簡(jiǎn)單示例。我們先用 ggplot 實(shí)例化圖,設(shè)置美化屬性和數(shù)據(jù),然后添加點(diǎn)、主題以及坐標(biāo)軸和標(biāo)題標(biāo)簽。
        #All Salaries
        ggplot(data=df, aes(x=season_start, y=salary, colour=team)) +
          geom_point() +
          theme(legend.position="none") +
          labs(title = 'Salary Over Time', x='Year', y='Salary ($)')


        Bokeh

        Bokeh 很美。從概念上講,Bokeh 類似于 ggplot,它們都是用圖形語(yǔ)法來構(gòu)建圖片,但 Bokeh 具備可以做出專業(yè)圖形和商業(yè)報(bào)表且便于使用的界面。為了說明這一點(diǎn),我根據(jù) 538 Masculinity Survey 數(shù)據(jù)集寫了制作直方圖的代碼:
        import pandas as pd
        from bokeh.plotting import figure
        from bokeh.io import show

        # is_masc is a one-hot encoded dataframe of responses to the question:
        # "Do you identify as masculine?"

        #Dataframe Prep
        counts = is_masc.sum()
        resps = is_masc.columns

        #Bokeh
        p2 = figure(title='Do You View Yourself As Masculine?',
                  x_axis_label='Response',
                  y_axis_label='Count',
                  x_range=list(resps))
        p2.vbar(x=resps, top=counts, width=0.6, fill_color='red', line_color='black')
        show(p2)

        #Pandas
        counts.plot(kind='bar')

        用 Bokeh 表示調(diào)查結(jié)果

        紅色的條形圖表示 538 個(gè)人關(guān)于「你認(rèn)為自己有男子漢氣概嗎?」這一問題的答案。9~14 行的 Bokeh 代碼構(gòu)建了優(yōu)雅且專業(yè)的響應(yīng)計(jì)數(shù)直方圖——字體大小、y 軸刻度和格式等都很合理。

        我寫的代碼大部分都用于標(biāo)記坐標(biāo)軸和標(biāo)題,以及為條形圖添加顏色和邊框。在制作美觀且表現(xiàn)力強(qiáng)的圖片時(shí),我更傾向于使用 Bokeh——它已經(jīng)幫我們完成了大量美化工作。


        用 Pandas 表示相同的數(shù)據(jù)

        藍(lán)色的圖是上面的第 17 行代碼。這兩個(gè)直方圖的值是一樣的,但目的不同。在探索性設(shè)置中,用 Pandas 寫一行代碼查看數(shù)據(jù)很方便,但 Bokeh 的美化功能非常強(qiáng)大。

        Bokeh 提供的所有便利都要在 matplotlib 中自定義,包括 x 軸標(biāo)簽的角度、背景線、y 軸刻度以及字體(大小、斜體、粗體)等。下圖展示了一些隨機(jī)趨勢(shì),其自定義程度更高:使用了圖例和不同的顏色和線條。

        Bokeh 還是制作交互式商業(yè)報(bào)表的絕佳工具。


        Plotly

        Plotly 非常強(qiáng)大,但用它設(shè)置和創(chuàng)建圖形都要花費(fèi)大量時(shí)間,而且都不直觀。在用 Plotly 忙活了大半個(gè)上午后,我?guī)缀跏裁炊紱]做出來,干脆直接去吃飯了。我只創(chuàng)建了不帶坐標(biāo)標(biāo)簽的條形圖,以及無法刪掉線條的「散點(diǎn)圖」。Ploty 入門時(shí)有一些要注意的點(diǎn):

        • 安裝時(shí)要有 API 秘鑰,還要注冊(cè),不是只用 pip 安裝就可以;

        • Plotly 所繪制的數(shù)據(jù)和布局對(duì)象是獨(dú)一無二的,但并不直觀;

        • 圖片布局對(duì)我來說沒有用(40 行代碼毫無意義?。?/span>



        但它也有優(yōu)點(diǎn),而且設(shè)置中的所有缺點(diǎn)都有相應(yīng)的解決方法:

        • 你可以在 Plotly 網(wǎng)站和 Python 環(huán)境中編輯圖片;

        • 支持交互式圖片和商業(yè)報(bào)表;

        • Plotly 與 Mapbox 合作,可以自定義地圖;

        • 很有潛力繪制優(yōu)秀圖形。


        以下是我針對(duì)這個(gè)包編寫的代碼:
        #plot 1 - barplot
        # **note** - the layout lines do nothing and trip no errors
        data = [go.Bar(x=team_ave_df.team,
                      y=team_ave_df.turnovers_per_mp)]

        layout = go.Layout(

            title=go.layout.Title(
                text='Turnovers per Minute by Team',
                xref='paper',
                x=0
            ),

            xaxis=go.layout.XAxis(
                title = go.layout.xaxis.Title(
                    text='Team',
                    font=dict(
                            family='Courier New, monospace',
                            size=18,
                            color='#7f7f7f'
                        )
                )
            ),

            yaxis=go.layout.YAxis(
                title = go.layout.yaxis.Title(
                    text='Average Turnovers/Minute',
                    font=dict(
                            family='Courier New, monospace',
                            size=18,
                            color='#7f7f7f'
                        )
                )
            ),

            autosize=True,
            hovermode='closest')

        py.iplot(figure_or_data=data, layout=layout, filename='jupyter-plot', sharing='public', fileopt='overwrite')



        #plot 2 - attempt at a scatterplot
        data = [go.Scatter(x=player_year.minutes_played,
                          y=player_year.salary,
                          marker=go.scatter.Marker(color='red',
                                                  size=3))]

        layout = go.Layout(title="test",
                        xaxis=dict(title='why'),
                        yaxis=dict(title='plotly'))

        py.iplot(figure_or_data=data, layout=layout, filename='jupyter-plot2', sharing='public')

        [Image: image.png]

        表示不同 NBA 球隊(duì)每分鐘平均失誤數(shù)的條形圖。
        表示薪水和在 NBA 的打球時(shí)間之間關(guān)系的散點(diǎn)圖

        總體來說,開箱即用的美化工具看起來很好,但我多次嘗試逐字復(fù)制文檔和修改坐標(biāo)軸標(biāo)簽時(shí)卻失敗了。但下面的圖展示了 Plotly 的潛力,以及我為什么要在它身上花好幾個(gè)小時(shí):

        Plotly 頁(yè)面上的一些示例圖

        Pygal

        Pygal 的名氣就不那么大了,和其它常用的繪圖包一樣,它也是用圖形框架語(yǔ)法來構(gòu)建圖像的。由于繪圖目標(biāo)比較簡(jiǎn)單,因此這是一個(gè)相對(duì)簡(jiǎn)單的繪圖包。使用 Pygal 非常簡(jiǎn)單:

        • 實(shí)例化圖片;

        • 用圖片目標(biāo)屬性格式化;

        • 用 figure.add() 將數(shù)據(jù)添加到圖片中。


        我在使用 Pygal 的過程中遇到的主要問題在于圖片渲染。必須要用 render_to_file 選項(xiàng),然后在 web 瀏覽器中打開文件,才能看見我剛剛構(gòu)建的東西。

        最終看來這是值得的,因?yàn)閳D片是交互式的,有令人滿意而且便于自定義的美化功能??偠灾@個(gè)包看起來不錯(cuò),但在文件的創(chuàng)建和渲染部分比較麻煩。



        Networkx

        雖然 Networkx 是基于 matplotlib 的,但它仍是圖形分析和可視化的絕佳解決方案。圖形和網(wǎng)絡(luò)不是我的專業(yè)領(lǐng)域,但 Networkx 可以快速簡(jiǎn)便地用圖形表示網(wǎng)絡(luò)之間的連接。以下是我針對(duì)一個(gè)簡(jiǎn)單圖形構(gòu)建的不同的表示,以及一些從斯坦福 SNAP 下載的代碼(關(guān)于繪制小型 Facebook 網(wǎng)絡(luò))。


        我按編號(hào)(1~10)用顏色編碼了每個(gè)節(jié)點(diǎn),代碼如下:
        options = {
            'node_color' : range(len(G)),
            'node_size' : 300,
            'width' : 1,
            'with_labels' : False,
            'cmap' : plt.cm.coolwarm
        }
        nx.draw(G, **options)

        用于可視化上面提到的稀疏 Facebook 圖形的代碼如下:
        import itertools
        import networkx as nx
        import matplotlib.pyplot as plt

        f = open('data/facebook/1684.circles''r')
        circles = [line.split() for line in f]
        f.close()

        network = []
        for circ in circles:
            cleaned = [int(val) for val in circ[1:]]
            network.append(cleaned)

        G = nx.Graph()
        for v in network:
            G.add_nodes_from(v)

        edges = [itertools.combinations(net,2for net in network]

        for edge_group in edges:
            G.add_edges_from(edge_group)

        options = {
            'node_color' : 'lime',
            'node_size' : 3,
            'width' : 1,
            'with_labels' : False,
        }
        nx.draw(G, **options)





        這個(gè)圖形非常稀疏,Networkx 通過最大化每個(gè)集群的間隔展現(xiàn)了這種稀疏化。

        有很多數(shù)據(jù)可視化的包,但沒法說哪個(gè)是最好的。希望閱讀本文后,你可以了解到在不同的情境下,該如何使用不同的美化工具和代碼。

        原文鏈接:https://towardsdatascience.com/reviewing-python-visualization-packages-fa7fe12e622b
        瀏覽 33
        點(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>
            欧美黄片AAA| 亚洲精品人妻在线| 亚洲精品ww| 狠狠狠狠狠狠干| 在线免费观看av网站| xxxx亚洲| 91亚洲在线观看| 深爱激情综合| 久久久久久久久久国产精品免费观看-百度| 国产精品电影| 无码av网站| 欧美日韩精品久久久免费观看| 天天干天天色天天日| 丁香婷婷五月色成人网站| 91吴梦梦一区二区传媒| 欧美性爱手机在线| 黄色成人视频免费看| 欧美色色视频| 操亚洲| 亚洲一二三四区| 人人操日本| 亚洲成a人无码| 干欧美女人| 91香蕉国产在线观看| 卡一卡二卡三| 成人做爰100片免费-百度| 国产性爱精品影片免费看| 国产A片| 无码视频在线免费观看| 国产福利av| 午夜福利院| 成人精品三级AV在线看| 成人免费无码婬片在线观看免费| 人人色人人干| 97视频在线免费观看| 国产学生妹在线播放| 呦小BBBB小小BBBB| 一区二区三区四区高清无码| 中文字幕一区在线| 亚洲一级免费视频| 北条麻妃人妻中文字幕91影视| 日韩一级黄色毛片| 亚洲av偷拍| 无码无码无码| 亚洲天堂男人的天堂| 啪啪网站免费观看| 熟妇人妻中文| 91人妻人人澡人人爽人妻| 人人看人人搂人人摸| 日韩欧美成人在线视频| 亚洲草逼| 大香蕉尹人视频| AV2014天堂网| 亚洲免费观看高清完整版在va线观看 | 天天综合7799| 亚洲无码观看视频| 日日夜夜AV| 高清无码波多野结衣| 日本a在线观看| 欧美一级特黄A片免费| 免费乱伦视频| 夜夜嗨av| 久草久| 91免费国产视频| 亚洲综合一区二区| 久久凹凸视频| 爱爱视频免费| 中文字幕伊人| 久热中文| 国产熟妇码视频黑料| 在线免费观看黄色视频| 懂色成人av影院| 日韩影音| 国产亚洲99久久精品| 久久综合加勒比| 成年人黄色视频免费观看| 婷婷丁香花| 国产一区二区在线播放| 狼友视频免费在线观看| 九色PORNY国产成人| 亚洲一区二区成人| www.97色| 狠狠色婷婷777| 日韩一二三四区| 欧洲操逼视频| 欧美中文字幕在线视频| 成人电影91| 一级片A片| 西西4444WWW无码视频| 91视频在线观看| 国产十欧洲十美国+亚洲一二三区在线午夜 | 亚洲av免费看| 亚洲无码制服| 精品一区二区视频| 自拍偷拍综合| 欧美爱爱网| 九九99电影| 五月激情婷婷基地| 夜夜骑免费视频| 久久国产日韩| 国产精品999999| 黄色动漫在线免费观看| Av黄色| 国产无码一二三| 琪琪色在线观看| 成人福利网站| 91人人澡人人爽人人看| 亚洲黄色电影在线观看| 欧美男女日逼视频| 91中文| 免费无码婬片AAAAA片| 激情小说在线观看| 亚洲精品国产AV婷婷| 97超碰伊人| 久久久无码视频| 内射无码专区久久亚洲| 日韩欧美黄色| 日韩城人网站| 国产成人无码区免费视频| 国产传媒av| 中文字幕在线视频日本| 乱伦婷婷| 亚洲另类天堂| 日韩免费黄色电影| 91丨九色丨熟女老版| 91麻豆精品| 国产91探花系列在线观看| 一道本不卡视频| 免费的黄色视频在线观看| 免费看黄色视频的网站| 成人黄色AV| 草莓视频在线播放| 成人性生活免费视频| 国产熟妇码视频户外直播| 国产精品可站18| 影音先锋色资源站| 亚洲一级a| 狠狠躁日日躁夜夜躁A片小说免费| 精品一区二区久久久久久久网站| 少妇搡BBBB搡BBB搡视频一级| 国产精品成人AV在线| 免费看欧美日黄片| 青娱亚洲| 午夜试看120秒体验区的特点| 一级a免一级a做片免费| 日韩在线一级| 91亚洲精品在线| 黄色一级网站| 日韩一级一级一级| 成人片网站在线观看| 日本婷婷| 丁香婷婷六月天| 人人澡人人干| 亚洲成人无码在线| 欧美久久国产精品| 久久国产一区二区| 亚洲一级二级三级片| 99久久婷婷国产精品2020| 精品九九九九| 国产精品久久久久久久久久久久| 国产精品视频在线看| 激情婷婷六月| va婷婷在线免费观看| 尤物网站在线观看| 狼友视频首页| 无码人妻系列| 欧美日韩精品| 成人国产精品在线观看| 亚洲视频在线观| 国产免费福利| 成人h视频| 亚洲欧美视频在线观看| 欧美精品成人免费片| 影音先锋91视频| 91亚洲精品国偷拍自产在线观看| 蜜桃av无码一区二区三区| 国产精品无码永久免费不卡| 欧美撒色逼撒| 好爽~要尿了~要喷了~同桌 | 青青草免费观看视频| 九九热精品视频在线观看| 成人黄色视频网站| 欧美在线日韩在线| AV在线四季综合网站| 久久午夜电影| 三级黄色片| 日韩欧美不卡色不卡| 不卡无码免费视频| 中文字幕乱码中文乱码91| 亚洲中文字幕影院| 性爱视频网址| 搞搞电影91| 另类国产| 亚洲性天堂| 国产人妖在线| AV三级无码| 超碰人人人人人人人人| 手机看片1024国产| 国产精品91视频| 午夜操日在线| 日日夜夜天天综合| 成人无码免费视频| 一区二区三区成人电影| 国产精品123| 国产特黄视频| 久久偷看各类wc女厕嘘嘘偷窃| 蜜臀久久| 97中文字幕| 亚洲精品成人无码熟妇在线| 国产精品色情| 国产精品视频免费看| 无码在线免费| 午夜操B| 欧一美一婬一伦一区二区三区黑人-亚| 无码一卡| 四虎永久在线精品无码| 伊人影院在线免费观看| ChineSe露脸老女人| 日韩成人一区二区三区| 招土一级黄色片| 丝瓜污视频| 婷婷五月精品| 97超碰在线免费观看| 青娱乐成人网| 精品一二三四| 青娱乐自拍偷拍| 色色天堂| 日本少妇性爱视频| 亚洲男人的天堂视频网在线观看+720P | 淫荡少妇美红久久久久久久久久| 围内精品久久久久久久久白丝制服 | 日本免费黄色小视频| 国产女人18毛片水18精| wwwav| 国产一区视频18| 91人人操人人| 中文字幕第98页| 青吴乐大香蕉| 久色婷婷| 国产精品一区在线| 国产欧美一区在线看| 你懂的在线免费观看| 91人妻人人| 日韩AV免费| 日韩中字无码| 亲子伦视频一区二区三区| 欧美三级视频在线观看| 欧美成人一区二区三区片| 黄页av| 日韩高清中文字幕| 成人AV电影在线观看| www黄色片| 无码一卡| 青青草五月天色婷婷丁香| 九九久久精品视频| 人人爱,人人操| 无码乱伦| 毛片无遮挡| 欧美三级大片| 亚洲精品字幕| 亚洲熟妇在线观看一区二区| 国产精品a久久久久| 甘肃WBBBB搡wBBBB| 你懂得视频在线观看| 一本一道伊人99久久综| 一级黄色毛片| 91色色色色| 一级a一级a爱片免费免免高潮| 天天操天天操| 成人三级片网| 国产资源在线观看| 加勒比无码人妻| 亚洲理论| 夜夜操天天操| 亚洲a视频在线| 国产不卡一| 久久久久大香蕉| 伊人性视频| 欧美久久久久久| 五月婷婷欧美| 国产无码电影网| 91久久久久国产一区二区| 日逼网址| 在线观看日本黄| 日韩午夜成人电影| 黑人干亚洲人| www.日韩AV| 无码AV在线播放| 麻豆911精一区二区| 国产精品无码ThePorn| 97爱爱| 精品91在线视频| 国产精品人妻AⅤ在线看| 抠骚逼| 欧美一本在线| 日韩欧美性爱| 污污污污污www在线观看优势| 蜜臀久久99精品久久久兰草影视| 91视频导航| 青娱乐成人电影|