Удаление NaN из легенды в Heatmap с помощью геопанд - PullRequest
0 голосов
/ 10 октября 2019

Я собираюсь составить тепловую карту заражений ботнетами Mirai для каждой страны, используя геопанды. У меня есть геоданные, которые структурированы следующим образом:

geometry    Country_Code    Infection_Rate
0   MULTIPOLYGON (((11108970.260 445285.130, 11108...   IDN 0.01616
6   POLYGON ((3008931.293 3740791.337, 3007063.917...   NaN nan
7   MULTIPOLYGON (((3009012.519 3740778.293, 30089...   CYP 0.06845
8   MULTIPOLYGON (((6915098.813 3796247.587, 69170...   IND 0.0076

Как видно из структуры, есть некоторые пропущенные значения, так как в некоторых странах уровень заражения неизвестен

I графиктепловая карта выглядит следующим образом:

## Some plot settings
colors = 6
cmap = 'Blues'
figsize = (16, 10)
plotvar = 'Infection_Rate'
scheme = 'equalinterval'
title = 'Infection rate per country (%)'
lables = ['0', '1', '2', '3','4','5']

## Create the plot
ax = geoinfect.plot(plotvar, cmap=cmap, figsize=figsize, k = colors, scheme = scheme,  legend=True)
ax.set_title(title, fontdict={'fontsize': 20}, loc='left')
ax.set_axis_off()
ax.set_xlim([-1.5e7, 1.7e7])
legend.set_bbox_to_anchor((.52, .4))

## Highlight missing values in grey
geoinfect[geoinfect.isna().any(axis=1)].plot(ax=ax, color='#D3D3D3')

Это дает мне следующий результат: Тепловая карта

Помимо плохого оформления, моя главная проблема с этим графиком заключается в том, что первая меткалегенды читается как «nan-0.21» вместо «0-0.21»

Есть ли возможность вручную отредактировать легенду так, чтобы первая метка гласила «0-0.21»?

Извините, если это очевидная ошибка, я довольно новичок в программировании :)

Ответы [ 2 ]

0 голосов
/ 11 октября 2019

Поскольку вы выводите отсутствующие значения отдельно, вы можете сначала отобразить только те строки, которые не содержат NaN, поэтому ваша легенда, естественно, будет 0 -.

ax = geoinfect[~geoinfect.isna().any(axis=1)].plot(plotvar, cmap=cmap, figsize=figsize, k = colors, scheme = scheme,  legend=True)

ax.set_title(title, fontdict={'fontsize': 20}, loc='left')
ax.set_axis_off()
ax.set_xlim([-1.5e7, 1.7e7])
legend.set_bbox_to_anchor((.52, .4))

## Highlight missing values in grey
geoinfect[geoinfect.isna().any(axis=1)].plot(ax=ax, color='#D3D3D3')
0 голосов
/ 10 октября 2019

Во-первых, измените геоданные, прежде чем строить вывод. Вы можете заменить значения 'nan', присутствующие в столбце 'Infection_Rate', на '0'. Следующий код должен дать вам желаемый результат:

geodataframe.Infection_Rate = geodataframe.Infection_Rate.replace({"nan": "0"})

И теперь вы можете приступить к построению тепловой карты с использованием приведенного выше кадра данных.

...