So erstellen Sie wunderschöne Altersverteilungsdiagramme mit Seaborn und Matplotlib (einschließlich Animation) | von Oscar Leo | Juni 2023

0
24


Erstellen eines Rasters mit mehreren Ländern

Sie können verwenden plt.subplots() um Raster zu erstellen, aber in diesem Tutorial möchte ich ein Raster aus Bildern erstellen, weil ich denke, dass es besser aussieht.

Die folgende Funktion nimmt eine Liste von Bildern und erstellt daraus ein Raster ncols. Dabei wird ein leeres Bild mit einer einzigen Hintergrundfarbe erstellt, das groß genug ist, um alle Figuren aufzunehmen.

def create_grid(figures, pad, ncols):
nrows = int(len(figures) / ncols)
measurement = figures[0].measurement

picture = Picture.new(
"RGBA",
(ncols * measurement[0] + (ncols - 1) * pad, nrows * measurement[1] + (nrows - 1) * pad),
"#ffffff00"
)

for i, determine in enumerate(figures):
col, row = i % ncols, i // ncols
picture.paste(determine, (col * (measurement[0] + pad), row * (measurement[1] + pad)))

return picture

Im folgenden Code iteriere ich über eine Liste von Ländern und füge das resultierende Diagramm hinzu figuresund erstellen Sie durch Ausführen ein Raster create_grid() Am Ende.

figures = []

for nation in [
"United States", "China", "Japan", "Brazil", "Canada",
"Germany", "Pakistan", "Russian Federation", "Nigeria",
"Sweden", "Cambodia", "Saudi Arabia", "Iceland",
"Spain", "South Africa", "Morocco"
]:

fig = plt.determine(figsize=(10, 8))

ax = create_age_distribution(
female_df=population_ratio_female,
male_df=population_ratio_male,
nation=nation,
12 months="2021"
)

ax.set(xlim=(-10, 10))

# New capabilities
format_ticks(ax, xformat="proportion")
add_legend(x=0.5, y=1.09)
plt.title("Age Distribution for {} in 2021".format(nation), y=1.14, fontsize=20)

picture = create_image_from_figure(fig)
picture = add_padding_to_chart(picture, 20, 20, 20, 5, background_color)

figures.append(picture)

grid = create_grid(figures, pad=20, ncols=4)

Beachten Sie, dass ich Verhältnisse anstelle von absoluten Zahlen und Mengen verwende xlim=(-10, 10). Sonst kann ich die Länder optisch nicht miteinander vergleichen.

Vom Autor erstellte Grafiken

Fahren wir mit dem letzten Teil dieses Tutorials fort – So erstellen Sie Zeitraffer-Visualisierungen.

Erstellen einer Zeitraffer-Visualisierung

Die statischen Altersverteilungsdiagramme sehen toll aus, aber es ist faszinierend zu sehen, wie sie sich im Laufe der Zeit verändern.

Da wir tatsächliche Werte von 1960 bis 2021 und Vorhersagen bis 2050 haben, können wir eine Zeitrafferanimation für einen relativ langen Zeitraum erstellen.

Bevor wir beginnen, muss ich Ihnen sagen, dass die Schriftart, die ich verwende, PT Mono, hat nicht für alle Zeichen die gleiche Höhe. Damit die Visualisierung intestine aussieht, musste ich sie verwenden plt.textual content() für das Jahr statt plt.title(). Wenn Sie eine andere Schriftart verwenden, ist dies nicht erforderlich.

Hier ist der Code:

pictures = []
years = record(population_male.columns[4:])

for 12 months in years:
fig = plt.determine(figsize=(10, 8))

ax = create_age_distribution(
female_df=population_female,
male_df=population_male,
nation="World",
12 months=12 months
)

# New capabilities
format_ticks(ax, xformat="hundreds of thousands", xlim=(-400000000, 400000000))
add_legend(x=0.5, y=1.09)
plt.title("Age Distribution for the World in ", y=1.14, fontsize=21)
plt.textual content(x=0.77, y=1.15, s=str(12 months), fontsize=21, remodel=ax.transAxes)

picture = create_image_from_figure(fig)
picture = add_padding_to_chart(picture, 20, 20, 20, 5, background_color)
pictures.append(picture)

ich benutze imageio um ein GIF aus der Liste der Bilder zu erstellen.

# Duplicating the final frames so as to add a delay 
# earlier than the animation restarts
pictures = pictures + [images[-1] for _ in vary(20)]
imageio.mimwrite('./time-lapse.gif', pictures, length=0.2)

Werfen wir einen Blick auf das Ergebnis.

Vom Autor erstellte Visualisierung

Eindrucksvoll! Das ist alles für dieses Tutorial; Lassen Sie mich wissen, ob es Ihnen gefallen hat und Sie etwas Nützliches gelernt haben.



Source link

HINTERLASSEN SIE EINE ANTWORT

Please enter your comment!
Please enter your name here