Когда я запускаю тот же сценарий с шейп-файлом adm2, результаты совершенно странные: цветные многоугольники находятся далеко от многоугольника с данными. У меня есть прикрепленная карта с тремя примерами цветных многоугольников и черными точками, где указано расположение данных.
Я буду признателен, если кто-нибудь сможет дать представление о том, что происходит, и если это возможно. как решить эту проблему.
Скрипт Python, использованный для создания графика:
Код: Выделить всё
#!/home/zmumba/anaconda3/bin/python
import pandas as pd
import geopandas as gpd
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
from mpl_toolkits.basemap import Basemap # optional ?
map_df = gpd.read_file("/home/zmumba/DA/Dekad_Progs/Shapefiles/Lesotho/geoBoundaries-LSO-ADM2-all/geoBoundaries-LSO-ADM2.shx")
risks_df=pd.read_csv("/home/zmumba/DA/Dekad_Progs/Output/H1dRrisks.csv")
map_df["risk"] = map_df.merge(risks_df, left_on="shapeName", right_on="District")["risk"]
colors = {1: "green", 2: "yellow", 3: "orange", 4: "red"} # or a list
labels = {1: "no risk", 2: "low risk", 3: "medium risk", 4: "high risk"}
catego = map_df["risk"].astype(str).str.cat(map_df["risk"].map(labels), sep="- ")
fig, ax = plt.subplots(figsize=(5, 5))
plt.title(f'Risk of Heavy 24hr Rain: 20-24Nov', y=1.04)
map_df.plot(
column=catego,
categorical=True,
edgecolor="k",
linewidths=0.8,
alpha=0.7,
cmap=ListedColormap([c for r,c in colors.items() if r in map_df["risk"].unique()]),
legend=True,
legend_kwds={
"title": "Risk Level",
"shadow": True,
"loc": "lower right",
"fontsize": 10,
},
ax=ax,
)
ax.set_axis_off()
plt.savefig('H1dRriskmap.png', dpi=300)
plt.show()

На прикрепленном изображении показаны номера полигонов из шейп-файла. Раскраска 42 цвета 41, раскраска 43 цвета 42.
Координаты 41, 42 и 43:
Код: Выделить всё
-29.3892289999999, 28.3056183629316 -> 41
-29.2870792999999, 29.2715247780569 -> 42
-29.2255776170000, 27.6546474532047 -> 43
Может ли быть что-то не так в коде Python?
Код считывается из файла в формате:
Код: Выделить всё
"District","risk"
"name1",1
"name2",1
...
"name78",1
Я был бы рад попробовать сделать то же самое в R, но проблема с R заключается в том, что , там будет написано «нет пакета sf» и так далее.
Подробнее здесь: https://stackoverflow.com/questions/792 ... n-intended
Мобильная версия