Изменить размер маркера на графике с помощью GeoPandas

10

У меня есть геоданные с точками и некоторыми связанными данными. Я хочу нанести его на карту, используя геопанды, и чтобы размер точек соответствовал одному из столбцов в геоданных.

Пока у меня есть следующий код:

base = world.plot(color='white', figsize=(20,10))
geo_df.plot(ax=base, marker='.', color='red', markersize = 
geo_df['Pop_2005'])
plt.xlim([-85, -60])
plt.ylim([-5, 12.5]);

Но я получаю следующую ошибку: TypeError: cannot convert the series to <class 'float'>

Любые идеи?

Хуан Франциско Салдарриага
источник
Это весь код?
Фезтер
@Fezter это весь код для рисования карты. Существует больше кода для построения геоданных, но здесь это не имеет значения. Есть ли здесь что-то важное? Спасибо.
Хуан Франциско
Каков тип поля Pop_2005? Это float или int?
Фезтер
3
Может ли быть так, что вы можете установить только один размер маркера, и он ожидает одно значение с плавающей запятой, а не серию / список / кортеж или с плавающей запятой?
derNincompoop
1
Стоит ли приводить Pop_2005явно к числу с плавающей точкой или целому числу? geo_df['Pop_2005'] = geo_df['Pop_2005'].astype(float)
om_henners

Ответы:

7

В геопанде> = 0.3 (выпущено в сентябре 2017 г.) построение точек основано на scatterметоде построения графика под matplotlib, который принимает переменный размер маркера.

Так что теперь вы можете передать столбец тому markersize, что сделал ОП в исходном вопросе:

import geopandas

cities = geopandas.read_file(geopandas.datasets.get_path('naturalearth_cities'))
# adding a column with random values for the size
cities['values'] = np.abs(np.random.randn(len(cities))) * 50

cities.plot(markersize=cities['values'])

дает:

введите описание изображения здесь

Конечно, если ваша цель состоит в том, чтобы просто изменить размер маркера на другое постоянное значение, вы все равно можете передать одно значение с плавающей точкой в ​​ключевое слово:

cities.plot(markersize=10)
Джорис
источник