Zeichnen Sie mit Python eine farbige Karte auf Präfekturebene wie die folgende Informationen zu Stadt / Gemeinde / Stadt / Dorf finden Sie unter hier.
Die Daten verwendeten übrigens die Anzahl der Personenkraftwagen, die landesweit im Besitz waren.
Am Ende der Seite befindet sich eine [Codeliste](# Codeliste).
Verwenden Sie eine Bibliothek namens japanmap, um farbige Karten zu erstellen
pip install japanmap
Vorbereitung anderer Bibliotheken
import numpy as np
import pandas as pd
import cv2
from PIL import Image
import matplotlib.colors
import matplotlib.pyplot as plt
from japanmap import *
Daten lesen Die Daten wurden durch Herunterladen der Excel-Datei 2019 von hier verarbeitet.
df = pd.read_csv("how_many_cars.csv")
df = df.iloc[:53,:8]
Speichern Sie die Anzahl der Personenkraftwagen nach Präfektur im Wörterbuchformat
for k,n in zip(df["Transportbüro"], df["Personenkraftwagen"]):
if k in ["Sapporo", "Hakodate", "Asahikawa", "Muroran", "Kushiro", "Obihiro", "Kitami"]:
tmp=1
else:
tmp = pref_code(k)
tmp = pref_names[tmp]
#print(k,tmp)
if tmp not in num_dict:
num_dict[tmp] = n
else:
num_dict[tmp] += n
Der Inhalt von num_dict ist immer noch so
num_dict
>> print(num_dict)
{'Präfektur Mie': 1161089.0,
'Kyoto': 1007847.0,
...
'Präfektur Tottori': 346273.0,
'Präfektur Kagoshima': 955360.0}
Konvertieren Sie den erstellten num_dict-Wert von der Anzahl der Einheiten in Farbinformationen (RGB).
n_min = min(num_dict.values())
n_max = max(num_dict.values())
#print(n_min)
#print(n_max)
cmap = plt.cm.rainbow
norm = matplotlib.colors.Normalize(vmin=n_min, vmax=n_max)
def color_scale(r):
tmp = cmap(norm(r))
return (tmp[0]*255, tmp[1]*255, tmp[2]*255)
for k,v in num_dict.items():
num_dict[k] = color_scale(v)
Inhalt des endgültigen num_dict
num_dict
>> print(num_dict)
{'Präfektur Mie': (19.5, 157.4059464288972, 241.021876181009),
'Kyoto': (41.49999999999999, 128.85792190698177, 246.1066417260737),
...
'Präfektur Tottori': (127.5, 0.0, 255.0),
'Präfektur Kagoshima': (47.5, 120.63885699318257, 247.29821868892742)}
Plotten Sie, indem Sie num_dict an japanmap übergeben
plt.figure(figsize=(10,8))
plt.imshow(picture(num_dict))
sm = plt.cm.ScalarMappable(cmap=cmap, norm=norm)
plt.colorbar(sm)
plt.show()
das ist alles!
pip install japanmap
import numpy as np
import pandas as pd
import cv2
from PIL import Image
import matplotlib.colors
import matplotlib.pyplot as plt
from japanmap import *
df = pd.read_csv("how_many_cars.csv")
df = df.iloc[:53,:8]
num_dict={}
for k,n in zip(df["Transportbüro"], df["Personenkraftwagen"]):
if k in ["Sapporo", "Hakodate", "Asahikawa", "Muroran", "Kushiro", "Obihiro", "Kitami"]:
tmp=1
else:
tmp = pref_code(k)
tmp = pref_names[tmp]
#print(k,tmp)
if tmp not in num_dict:
num_dict[tmp] = n
else:
num_dict[tmp] += n
n_min = min(num_dict.values())
n_max = max(num_dict.values())
#print(n_min)
#print(n_max)
cmap = plt.cm.rainbow
norm = matplotlib.colors.Normalize(vmin=n_min, vmax=n_max)
def color_scale(r):
tmp = cmap(norm(r))
return (tmp[0]*255, tmp[1]*255, tmp[2]*255)
for k,v in num_dict.items():
num_dict[k] = color_scale(v)
plt.figure(figsize=(10,8))
plt.imshow(picture(num_dict))
sm = plt.cm.ScalarMappable(cmap=cmap, norm=norm)
plt.colorbar(sm)
plt.show()
Recommended Posts