一行 Python 代碼輕松構(gòu)建樹(shù)狀熱力圖
今天和大家一起學(xué)習(xí)一種可視化技術(shù):構(gòu)建樹(shù)狀熱力圖treemap。樹(shù)形圖易于可視化,且易于被人理解。樹(shù)狀圖通過(guò)展示不同大小的矩形,以傳達(dá)不同大小的數(shù)據(jù)量,一般認(rèn)為,較大的矩形意味著占總體的一大部分,而較小的矩形意味著整體的一小部分。在本文中,云朵君將和大家一起學(xué)習(xí)如何使用Squarify庫(kù)在 Python 中構(gòu)建樹(shù)形圖。
介紹
樹(shù)狀圖使用嵌套在一起的不同大小的矩形來(lái)可視化分層數(shù)據(jù)。每個(gè)矩形的大小與其代表的整體數(shù)據(jù)量成正比。這些嵌套的矩形代表樹(shù)的分支,因此得名。除了尺寸外,每個(gè)矩形都有代表獨(dú)特類(lèi)別的獨(dú)特顏色。樹(shù)狀圖廣泛用于從金融機(jī)構(gòu)到銷(xiāo)售組織的行業(yè)。
樹(shù)形圖最早是在 1990 年代早期由美國(guó)馬里蘭大學(xué)人機(jī)交互實(shí)驗(yàn)室的 Ben Shneiderman 教授發(fā)明的。這種可視化背后的想法是在固定空間中按大小比較數(shù)量?,F(xiàn)在,我們將看看如何實(shí)際構(gòu)建詞云。
佛羅里達(dá)州的樹(shù)狀圖 來(lái)源:https://commons.wikimedia.org
使用 Squarify 構(gòu)建樹(shù)狀圖
Python 中的,可以使用 Squarify 直接構(gòu)建樹(shù)狀圖。且只需要一行代碼squarify.plot(data)即可輕松構(gòu)建。
1. 安裝必要的庫(kù)
!pip install squarify
2. 導(dǎo)入必要的庫(kù)
import matplotlib.pyplot as plt
import squarify
3. 創(chuàng)建隨機(jī)數(shù)據(jù)
隨機(jī)生成一個(gè)值列表,這些值將作為數(shù)據(jù)傳遞到我們的繪圖中。
data = [500, 250, 60, 120]
4. 繪制樹(shù)狀圖
使用**squarify.plot()** 方法構(gòu)建樹(shù)狀圖。這里將隨機(jī)數(shù)據(jù)變量data作為此 squarify.plot 方法的參數(shù)。此外,附加一行修飾代碼 plt.axis('off') 隱藏 樹(shù)狀圖 的軸。
squarify.plot(data)
plt.axis('off')
plt.show()
5. 把它們放在一起
import matplotlib.pyplot as plt
import squarify
data = [500, 250, 60, 120]
squarify.plot(data)
plt.axis('off')
plt.show()
在執(zhí)行此代碼時(shí),我們得到:
每次執(zhí)行此代碼時(shí),它都生成一組隨機(jī)顏色的嵌套矩形。
使用附加參數(shù)
借助 .plot() 方法的參數(shù),可以在樹(shù)狀圖中添加更多的修飾??梢酝ㄟ^(guò)明確指定屬性來(lái)控制樹(shù)形圖的顏色、標(biāo)簽和填充。
1. 指定樹(shù)狀圖的顏色
import matplotlib.pyplot as plt
import squarify
sizes = [500, 250, 120, 60]
color = ['red', 'green', 'blue', 'orange']
squarify.plot(sizes,color=color)
plt.axis('off')
plt.show()
在執(zhí)行此代碼時(shí),我們得到:
2.給樹(shù)狀圖添加標(biāo)簽
不同的標(biāo)簽值可以通過(guò)將列表傳遞到 squarify.plot() 的標(biāo)簽屬性來(lái)顯式添加標(biāo)簽。這將覆蓋現(xiàn)有標(biāo)簽或?qū)?biāo)簽添加到我們的樹(shù)狀圖中(如果不存在)。標(biāo)簽將按照.plot()所傳遞的列表中的相同順序被添加到樹(shù)狀圖中。
import matplotlib.pyplot as plt
import squarify
labels = ['A', 'AB', 'ABC', 'ABCD']
sizes = [500, 250, 120, 60]
color = ['red', 'green', 'blue', 'orange']
squarify.plot(sizes,color=color, label = labels)
plt.axis('off')
plt.show()
在執(zhí)行此代碼時(shí),我們得到:
3. 樹(shù)狀圖中的pad
可以在樹(shù)狀圖中添加pad,將樹(shù)狀圖中的每個(gè)具體彼此分離,這將有助于更好地區(qū)分矩形。當(dāng)有大量類(lèi)別或矩形時(shí),這很有用??梢酝ㄟ^(guò)將pad參數(shù)設(shè)置為T(mén)rue來(lái)調(diào)用。
import matplotlib.pyplot as plt
import squarify
labels = ['AB', 'A', 'ABC', 'ABCD']
sizes = [500, 250, 120, 60]
color = ['red', 'green', 'blue', 'orange']
squarify.plot(sizes,color=color, label = labels, pad = True)
plt.axis('off')
plt.show()
在執(zhí)行代碼時(shí),我們得到:
寫(xiě)在最后
由此看來(lái),構(gòu)建樹(shù)形圖可謂是小菜一碟。除了squarify 庫(kù),樹(shù)狀圖還可以使用 Python 中的其他幾個(gè)庫(kù)來(lái)構(gòu)建。如比較流行的plotly庫(kù)。在今天的次條推文中介紹了其應(yīng)用案例,感興趣的小伙伴可以看看。
import plotly_express as px
import plotly.graph_objects as go
px.treemap(names = name, parents = parent)
go.Figure(go.Treemap(labels = name, parents = parent,))
當(dāng)然,還有許多 BI 工具可用于更加方便簡(jiǎn)單地構(gòu)建樹(shù)狀圖。
有時(shí),樹(shù)狀圖中可能會(huì)出現(xiàn)歧義。如果有多個(gè)具有相同數(shù)量(或矩形大?。┖拖嗤伾顪\的類(lèi)別,則導(dǎo)致用戶(hù)最終很難區(qū)分它們。所以在構(gòu)建樹(shù)狀圖時(shí),必須始終考慮所涉及的類(lèi)別數(shù)量和顏色映射。