Почему мой шейп-файл окрашивает многоугольник в другой цвет, чем предполагалось?Python

Программы на Python
Ответить
Anonymous
 Почему мой шейп-файл окрашивает многоугольник в другой цвет, чем предполагалось?

Сообщение Anonymous »

У меня есть данные о рисках, которые я хотел бы раскрасить на карте в соответствии с уровнем риска. Я читаю шейп-файл и файл данных CSV, которые затем объединяю. Это очень хорошо работает с шейп-файлом adm1.
Когда я запускаю тот же сценарий с шейп-файлом 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
где 1 может b2 2, 3 или 4 в зависимости от уровня риска.
Я был бы рад попробовать сделать то же самое в R, но проблема с R заключается в том, что , там будет написано «нет пакета sf» и так далее.

Подробнее здесь: https://stackoverflow.com/questions/792 ... n-intended
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»