Python數(shù)據(jù)可視化的五種方法小結(jié)
1.和弦圖
和弦圖以富有創(chuàng)意的方式呈現(xiàn)數(shù)據(jù)點(diǎn)間的復(fù)雜關(guān)系。
在和弦圖中,節(jié)點(diǎn)環(huán)繞成一個(gè)圓形,通過(guò)弧線彼此相連。弧長(zhǎng)對(duì)應(yīng)連接值的大小,而弧線的粗細(xì)則直觀體現(xiàn)關(guān)系的重要程度。同時(shí),利用不同顏色對(duì)數(shù)據(jù)進(jìn)行分類,方便用戶進(jìn)行對(duì)比分析。
因其強(qiáng)大的關(guān)系展示能力,和弦圖被廣泛應(yīng)用于眾多領(lǐng)域,在基因數(shù)據(jù)可視化方面表現(xiàn)尤為突出。
下面用 Holoviews 和 Bokeh 庫(kù),來(lái)創(chuàng)建一個(gè)展示五個(gè)國(guó)家貿(mào)易關(guān)系的和弦圖。
import holoviews as hv from holoviews import opts import pandas as pd import numpy as np hv.extension('bokeh') # 代表5個(gè)國(guó)家之間出口量的示例矩陣 export_data = np.array([[0, 50, 30, 20, 10], [10, 0, 40, 30, 20], [20, 10, 0, 35, 25], [30, 20, 10, 0, 40], [25, 15, 30, 20, 0]]) labels = ['美國(guó)', '中國(guó)', '德國(guó)', '日本', '印度'] # 創(chuàng)建一個(gè)pandas DataFrame df = pd.DataFrame(export_data, index=labels, columns=labels) df = df.stack().reset_index() df.columns = ['來(lái)源', '目標(biāo)', '數(shù)值'] # 創(chuàng)建一個(gè)Chord對(duì)象 chord = hv.Chord(df) # 對(duì)和弦圖進(jìn)行樣式設(shè)置 chord.opts( opts.Chord( cmap='Category20', edge_cmap='Category20', labels='source', label_text_font_size='10pt', edge_color='source', node_color='index', width=700, height=700 ) ).select(value=(5, None)) # 顯示圖表 chord
2.旭日?qǐng)D
旭日?qǐng)D超越了傳統(tǒng)的餅圖和環(huán)形圖,能夠清晰展示層次結(jié)構(gòu)數(shù)據(jù)。
旭日?qǐng)D用同心圓表示不同層級(jí),中心是根節(jié)點(diǎn),扇形代表具體節(jié)點(diǎn)。扇形大小和數(shù)據(jù)值掛鉤,數(shù)據(jù)重要程度一目了然。
在可視化文件系統(tǒng)層級(jí)結(jié)構(gòu)、用戶導(dǎo)航路徑、市場(chǎng)細(xì)分和基因數(shù)據(jù)等方面很有用,下面是使用Plotly庫(kù)創(chuàng)建旭日?qǐng)D的示例。
import plotly.express as px import numpy as np df = px.data.gapminder().query("year == 2007") fig = px.sunburst(df, path=['continent', 'country'], values='pop', color='lifeExp', hover_data=['iso_alpha'], color_continuous_scale='RdBu', color_continuous_midpoint=np.average(df['lifeExp'], weights=df['pop'])) fig.show()
3.六邊形熱力圖
六邊形熱力圖(Hexbin Plot),即六邊形分箱圖,在可視化二維數(shù)據(jù)分布方面非常有效,尤其適用于數(shù)據(jù)點(diǎn)密集的情況。它將數(shù)據(jù)空間劃分為六邊形單元格,單元格顏色表示其中數(shù)據(jù)點(diǎn)的數(shù)量,能清晰呈現(xiàn)數(shù)據(jù)的分布情況。
下面是使用Python和Matplotlib創(chuàng)建六邊形熱力圖的示例,展示空氣質(zhì)量指數(shù)(AQI)和醫(yī)院就診人數(shù)之間的相關(guān)性。
import numpy as np import matplotlib.pyplot as plt from mplhexbin import HexBin # 模擬數(shù)據(jù) np.random.seed(0) # 確保結(jié)果可復(fù)現(xiàn) n_points = 10000 x = np.random.rand(n_points) * 100# 空氣質(zhì)量指數(shù)(AQI)取值范圍為0到100 y = 5 * np.sin(x * np.pi / 50) + np.random.randn(n_points) * 15# 模擬的醫(yī)院就診人數(shù),與AQI相關(guān)但存在噪聲 # 創(chuàng)建一個(gè)新的圖形 fig, ax = plt.subplots(figsize=(10, 8)) # 使用HexBin創(chuàng)建六邊形分箱圖 hb = HexBin(ax, gridsize=20, cmap='viridis', extent=[0, 100, -30, 50]) # 設(shè)置網(wǎng)格大小、顏色映射和范圍 hb.hexbin(x, y, mincnt=1) # 繪制六邊形分箱圖,mincnt設(shè)置最小計(jì)數(shù)閾值 # 添加標(biāo)題和軸標(biāo)簽 ax.set_title('空氣質(zhì)量指數(shù)(AQI)與醫(yī)院就診人數(shù)之間的關(guān)系') ax.set_xlabel('空氣質(zhì)量指數(shù)(AQI)') ax.set_ylabel('醫(yī)院就診人數(shù)') # 顯示圖形 plt.colorbar(hb.cmap, ax=ax, label='數(shù)據(jù)點(diǎn)數(shù)量') # 添加顏色條并設(shè)置標(biāo)簽 plt.show()
4.?;鶊D
?;鶊D用于可視化數(shù)據(jù)流動(dòng),非常適合展示能源、材料和金融等領(lǐng)域的數(shù)據(jù)。
它以馬修·亨利·菲尼亞斯·里亞爾·?;∕atthew Henry Phineas Riall Sankey)的名字命名,能展示系統(tǒng)各階段或各部分之間的流量。節(jié)點(diǎn)寬度與流量大小成正比,便于理解數(shù)據(jù)的規(guī)模和流向。
下面是使用Python創(chuàng)建?;鶊D的示例,展示從生產(chǎn)源頭到小城市消費(fèi)者的能源流動(dòng)情況。
import plotly.graph_objects as go labels = ["煤炭", "太陽(yáng)能", "風(fēng)能", "核能", "居民", "工業(yè)", "商業(yè)"] source = [0, 1, 2, 3, 0, 1, 2, 3] target = [4, 4, 4, 4, 5, 5, 5, 5] value = [25, 10, 40, 20, 30, 15, 25, 35] # 創(chuàng)建?;鶊D對(duì)象 fig = go.Figure(data=[go.Sankey( node=dict( pad=15, thickness=20, line=dict(color="black", width=0.5), label=labels ), link=dict( source=source, target=target, value=value ))]) fig.update_layout(title_text="模范城市的能源流動(dòng)", font_size=12) fig.show()
5.流圖(主題河流圖)
流圖形似河流,用于描繪數(shù)據(jù)隨時(shí)間的變化。不同顏色區(qū)分不同類別,“河流”的寬度代表每個(gè)類別的數(shù)值大小。它以可視化的方式展示數(shù)據(jù)趨勢(shì)和關(guān)系,便于理解數(shù)據(jù)動(dòng)態(tài)。
下面是用Altair庫(kù)創(chuàng)建流圖的示例:
import altair as alt from vega_datasets import data source = data.unemployment_across_industries.url alt.Chart(source).mark_area().encode( alt.X('yearmonth(date):T', axis=alt.Axis(format='%Y', domain=False, tickSize=0) ), alt.Y('sum(count):Q', stack='center', axis=None), alt.Color('series:N', scale=alt.Scale(scheme='category20b') ) ).interactive()
在數(shù)據(jù)驅(qū)動(dòng)的時(shí)代,高級(jí)可視化圖表為我們提供了挖掘數(shù)據(jù)深層價(jià)值的強(qiáng)大工具。無(wú)論是和弦圖的復(fù)雜關(guān)系呈現(xiàn)、旭日?qǐng)D的層次結(jié)構(gòu)解析,還是六邊形熱力圖的數(shù)據(jù)分布洞察,?;鶊D的流動(dòng)分析和流圖的時(shí)間趨勢(shì)展示,都拓展了我們對(duì)數(shù)據(jù)的理解維度。掌握這些工具,意味著能夠用更專業(yè)、更精準(zhǔn)的方式傳遞信息,讓數(shù)據(jù)真正成為推動(dòng)業(yè)務(wù)和科研進(jìn)步的引擎。
以上就是Python數(shù)據(jù)可視化的五種方法小結(jié)的詳細(xì)內(nèi)容,更多關(guān)于Python數(shù)據(jù)可視化的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python復(fù)制列表時(shí)[:]和[::]之間有什么區(qū)別
這篇文章主要給大家介紹了關(guān)于python復(fù)制列表時(shí)[:]和[::]之間有什么區(qū)別的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-10-10Python numpy二維數(shù)組如何刪除指定行和列
本文展示了如何對(duì)數(shù)組進(jìn)行行列刪除操作,包括刪除單行、單列、多行和多列的方法,通過(guò)具體的運(yùn)行結(jié)果展示,讀者可以清晰地了解到如何在不同情況下進(jìn)行數(shù)據(jù)處理,文章內(nèi)容實(shí)用,適合需要進(jìn)行數(shù)據(jù)處理的讀者參考學(xué)習(xí)2024-09-09Python實(shí)現(xiàn)的棧、隊(duì)列、文件目錄遍歷操作示例
這篇文章主要介紹了Python實(shí)現(xiàn)的棧、隊(duì)列、文件目錄遍歷操作,結(jié)合實(shí)例形式分析了Python數(shù)據(jù)結(jié)構(gòu)中棧與隊(duì)列的定義、使用,以及文件目錄的遍歷相關(guān)操作技巧,需要的朋友可以參考下2019-05-05將tensorflow的ckpt模型存儲(chǔ)為npy的實(shí)例
今天小編就為大家分享一篇將tensorflow的ckpt模型存儲(chǔ)為npy的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07如何利用PyQt5制作一個(gè)簡(jiǎn)單的登錄界面
初學(xué)者制作登錄界面時(shí)常遇到網(wǎng)上代碼看不懂、不會(huì)用、用不了的問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于如何利用PyQt5制作一個(gè)簡(jiǎn)單的登錄界面,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-06-06Python 安裝setuptools和pip工具操作方法(必看)
下面小編就為大家?guī)?lái)一篇Python 安裝setuptools和pip工具操作方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05