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].measurementpicture = 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 figures
und 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.
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.
Eindrucksvoll! Das ist alles für dieses Tutorial; Lassen Sie mich wissen, ob es Ihnen gefallen hat und Sie etwas Nützliches gelernt haben.