一、引言
? ? ?在數據可視化領域,除了常見的折線圖、柱狀圖和散點圖,還有一些高級圖表類型可以幫助我們更直觀地展示復雜數據關系。本文將介紹五種擴展圖表:和弦圖、旭日圖、六邊形箱圖、桑基圖和主題流圖。這些圖表在展示數據關系、層次結構和流量分布方面具有獨特的優勢。資源綁定附上完整資料供讀者參考學習!
二、和弦圖
2.1 什么是和弦圖?
? ? 和弦圖(Chord Diagram)是一種用于展示矩陣數據的可視化工具,通常用于展示不同節點之間的關系強度。它通過弧線連接節點,弧線的寬度表示關系的強度。
2.2 示例代碼
import plotly.graph_objects as go# 創建數據
nodes = ['A', 'B', 'C', 'D', 'E']
matrix = [[0, 10, 5, 3, 2],[10, 0, 8, 4, 1],[5, 8, 0, 6, 7],[3, 4, 6, 0, 9],[2, 1, 7, 9, 0]]# 創建和弦圖
fig = go.Figure(data=go.Sankey(node=dict(pad=15,thickness=20,line=dict(color="black", width=0.5),label=nodes,color="blue"),link=dict(source=[0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4],target=[1, 2, 3, 4, 0, 2, 3, 4, 0, 1, 3, 4, 0, 1, 2, 4, 0, 1, 2, 3],value=[10, 5, 3, 2, 10, 8, 4, 1, 5, 8, 6, 7, 3, 4, 6, 9, 2, 1, 7, 9])
))# 顯示圖表
fig.show()
2.3 說明
-
節點和矩陣:節點是圖中的實體,矩陣表示節點之間的關系強度。
-
顏色映射:使用
cmap
和edge_cmap
設置顏色映射。
三、旭日圖
3.1 什么是旭日圖?
? ? 旭日圖(Sunburst Chart)是一種層次結構可視化工具,用于展示層次數據。它通過環形扇區展示數據的層次關系,每個扇區的大小表示數據的值。
3.2 示例代碼
import matplotlib.pyplot as plt
import numpy as np
import plotly.express as px# 創建數據
data = dict(character=["Eve", "Cain", "Seth", "Enos", "Noam", "Abel", "Awan", "Enoch", "Azura"],parent=["", "Eve", "Eve", "Seth", "Seth", "Eve", "Eve", "Awan", "Eve"],value=[10, 14, 12, 10, 2, 6, 6, 4, 4]
)# 創建旭日圖
fig = px.sunburst(data,names='character',parents='parent',values='value',title='旭日圖示例'
)# 顯示圖表
fig.show()
3.3 說明
-
層次數據:通過
names
和parents
參數定義層次關系。 -
值:通過
values
參數設置每個節點的大小。
四、六邊形箱圖
4.1 什么是六邊形箱圖?
? ? 六邊形箱圖(Hexbin Plot)是一種用于展示二維數據密度的圖表。它將數據點劃分到六邊形網格中,并通過顏色深淺表示密度。
4.2 示例代碼
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False# 創建數據
x = np.random.normal(0, 1, 1000)
y = np.random.normal(0, 1, 1000)# 創建六邊形箱圖
plt.figure(figsize=(10, 8))
plt.hexbin(x, y, gridsize=30, cmap="mako")
plt.title('六邊形箱圖示例')
plt.xlabel('X軸')
plt.ylabel('Y軸')
plt.colorbar(label='密度')
plt.show()
4.3 說明
-
數據分布:使用
histplot
函數創建六邊形箱圖。 -
顏色映射:通過
cmap
參數設置顏色映射。
五、桑基圖
5.1 什么是桑基圖?
? ? 桑基圖(Sankey Diagram)是一種用于展示流量或轉移的圖表。它通過帶狀連接展示不同節點之間的流量大小。
5.2 示例代碼
import plotly.graph_objects as go
labels = ["Coal", "Solar", "Wind", "Nuclear", "Residential", "Industrial", "Commercial"]
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]
#Create the Sankey diagram object
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="Energy Flow in Model City", font_size=12)
fig.show()
5.3 說明
-
節點和邊:通過
source
和target
定義節點,value
表示流量大小。 -
顏色映射:使用
cmap
設置顏色映射。
六、主題流圖
6.1 什么是主題流圖?
主題流圖(Theme River)是一種用于展示時間序列數據的圖表,通常用于展示多個主題隨時間的變化趨勢。
6.2 示例代碼
import altair as alt
from vega_datasets import datasource = data.unemployment_across_industries.urlchart = 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()# 保存為HTML文件
chart.save('unemployment_chart.html')
6.3 說明
-
時間序列:通過
stackplot
函數創建主題流圖。 -
堆疊區域:每個主題的區域堆疊在一起,展示隨時間的變化趨勢。
七、總結
? ? ?本文介紹了五種擴展可視化圖表:和弦圖、旭日圖、六邊形箱圖、桑基圖和主題流圖。這些圖表在展示復雜數據關系、層次結構和流量分布方面具有獨特的優勢。希望這些示例能夠激發您的靈感,幫助您在實際項目中選擇合適的圖表類型。資源綁定附上完整資料供讀者參考學習!
如果您有任何問題或建議,請隨時在評論區留言!