2010-07-19 89 views
12

我感興趣的畫treemap樹形圖圖表在Python

treemap example

是什麼力量讓一個在Python的最簡單的方法?鑑於正確的輸入數據,是否有圖書館可以製作這樣的圖形?

+1

7年過去了,仍然沒有像樣的python軟件包能夠繪製簡單的treemap。下面列出的答案仍然是最先進的,但非常無益。使用R或js它是兩行代碼的問題,但爲什麼在Python中如此複雜?我不明白。 – MERose 2017-02-22 12:49:35

回答

3

這些可用於:

我注意到,有在PyPI中也樹形圖庫。我沒有試過那個。

+0

matlab方法實際上是一個SciPy食譜,可在http://scipy-cookbook.readthedocs.io/items/Matplotlib_TreeMap.html – MERose 2017-02-22 12:17:26

2

這裏有幾個選項:

+0

記錄不當。不能推薦他們。 – MERose 2017-02-22 12:27:20

1

您可以使用Pygal庫,這是如此簡單

http://pygal.org/en/stable/documentation/types/treemap.html

另一種方法是你可以使用squarify庫,這裏就是我使用了代碼

import matplotlib 
import matplotlib.pyplot as plt 
import pandas as pd 
import squarify 

# qualtities plotted 
# squarre area is the town surface area (superf) 
# color scale is the town population in 2011 (p11_pop) 

# read data from csv file 
# data from CAPP opendata http://opendata.agglo-pau.fr/index.php/fiche?idQ=27 
df = pd.read_excel("Customer Success New.xlsx") 
df = df.set_index("location_id") 
df = df[["user_id", "company_id"]] 
df2 = df.sort_values(by="user_id", ascending=False) 

# treemap parameters 
x = 0. 
y = 0. 
width = 100. 
height = 100. 
cmap = matplotlib.cm.viridis 

# color scale on the population 
# min and max values without Pau 
mini, maxi = df2.company_id.min(), df2.company_id.max() 
norm = matplotlib.colors.Normalize(vmin=mini, vmax=maxi) 
colors = [cmap(norm(value)) for value in df2.company_id] 
colors[1] = "#FBFCFE" 

# labels for squares 
#labels = ["hab" % (label) for label in zip(df2.index, df2.user_id), df2.company_id)] 
#labels[11] = "MAZERES" % (df2["user_id"]["MAZERES-LEZONS"], df2["company_id"]["MAZERES-LEZONS"]) 

# make plot 
fig = plt.figure(figsize=(12, 10)) 
fig.suptitle("Population et superficie des communes de la CAPP", fontsize=20) 
ax = fig.add_subplot(111, aspect="equal") 
ax = squarify.plot(df2.superf, color=colors, label=labels, ax=ax, alpha=.7) 
ax.set_xticks([]) 
ax.set_yticks([]) 
ax.set_title("L'aire de chaque carré est proportionnelle à la superficie de la commune\n", fontsize=14) 

# color bar 
# create dummy invisible image with a color map 
img = plt.imshow([df2.p11_pop], cmap=cmap) 
img.set_visible(False) 
fig.colorbar(img, orientation="vertical", shrink=.96) 

fig.text(.76, .9, "Population", fontsize=14) 
fig.text(.5, 0.1, 
     "Superficie totale %d km2, Population de la CAPP : %d hab" % (df2.superf.sum(), df2.p11_pop.sum()), 
     fontsize=14, 
     ha="center") 
fig.text(.5, 0.07, 
     "Source : http://opendata.agglo-pau.fr/", 
     fontsize=14, 
     ha="center") 

plt.show() 
+1

儘管這個鏈接可能回答這個問題,但最好在這裏包含答案的基本部分,並提供供參考的鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 - [來自評論](/評論/低質量帖子/ 17434830) – Oz123 2017-09-25 07:26:23

+0

好吧,感謝您的反饋,我會更新我的答案 – 2017-09-25 07:44:34

+0

@NabihIbrahimBawazir看起來好多了,謝謝你更新你的答案! – g00glen00b 2017-09-25 08:13:03