2010-07-19 45 views
12

Tôi quan tâm đến vẽ một treemap:TreeMap trực quan bằng Python

treemap example

cách dễ nhất để làm cho một trong Python là gì? Có một thư viện có thể tạo ra một hình ảnh như vậy, với dữ liệu đầu vào thích hợp không?

+1

7 năm sau nó vẫn còn lố bịch rằng không có gói python phong nha có thể vẽ một sơ đồ tre đơn giản. Câu trả lời được liệt kê dưới đây vẫn là trạng thái của nghệ thuật nhưng vô cùng hữu ích. Với R hoặc js nó là một vấn đề của hai dòng mã, nhưng tại sao rất phức tạp trong python? Tôi không hiểu. – MERose

Trả lời

3

Đây có thể được sử dụng:

tôi nhận thấy rằng có một thư viện treemap trong pypi cũng có. Tôi chưa thử cái đó.

+0

Phương pháp tiếp cận matlab thực chất là sách dạy nấu ăn SciPy có tại http://scipy-cookbook.readthedocs.io/items/Matplotlib_TreeMap.html – MERose

2

Dưới đây là một vài lựa chọn:

+0

Tài liệu kém. Không thể giới thiệu chúng. – MERose

1

Bạn có thể sử dụng thư viện Pygal, đây là đơn giản như vậy

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

Một giải pháp khác là bạn có thể sử dụng thư viện squarify, đây là một mã mà tôi đã được sử dụng

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

Trong khi liên kết này có thể trả lời câu hỏi, tốt hơn nên bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo. Câu trả lời chỉ liên kết có thể trở thành không hợp lệ nếu trang được liên kết thay đổi. - [Từ đánh giá] (/ review/low-quality-posts/17434830) – Oz123

+0

Ok, cảm ơn phản hồi của cả hai bạn, tôi sẽ cập nhật câu trả lời của tôi –

+0

@NabihIbrahimBawazir trông đẹp hơn nhiều, cảm ơn bạn đã cập nhật câu trả lời! – g00glen00b