2010-07-19 15 views
12

Ich habe Interesse an Zeichnung eines treemap:Treemap Visualisierung in Python

treemap example

Was ist der einfachste Weg, einen in Python zu machen? Gibt es eine Bibliothek, die bei den richtigen Eingabedaten eine solche Grafik erzeugen könnte?

+1

7 Jahre später ist es immer noch lächerlich, dass es kein vernünftiges Python-Paket gibt, das eine einfache Treemap darstellen kann. Die unten aufgeführten Antworten sind immer noch Stand der Technik, aber sehr wenig hilfreich. Bei R oder Js geht es um zwei Codezeilen, aber warum ist Python so kompliziert? Ich verstehe es nicht. – MERose

Antwort

3

Diese verwendet werden könnte: auch

ich bemerkt, dass es eine treemap Bibliothek in pypi ist. Ich habe das nicht ausprobiert.

+0

Der Matlab-Ansatz ist in der Tat ein SciPy-Kochbuch, das unter http://scipy-cookbook.readthedocs.io/items/Matplotlib_TreeMap.html verfügbar ist. – MERose

2

Hier sind ein paar Optionen:

+0

Schlecht dokumentiert. Kann sie nicht empfehlen. – MERose

1

Sie Pygal Bibliothek verwenden können, das so einfach ist,

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

Eine andere Lösung ist es, Ihnen squarify Bibliothek verwenden können, hier ist ein Code, den ich verwendet wurde

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

Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz zur Verfügung zu stellen. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert. - [Aus Bewertung] (/ review/low-quality-posts/17434830) – Oz123

+0

Ok, danke für das Feedback für euch beide, ich werde meine Antwort aktualisieren –

+0

@NabihIbrahimBawazir sieht viel besser aus, danke für die Aktualisierung Ihrer Antwort! – g00glen00b