Ubah ukuran marker dalam plot dengan GeoPandas


10

Saya memiliki geodataframe dengan poin dan beberapa data terkait. Saya ingin memplotnya di peta menggunakan geopanda dan memiliki ukuran titik yang sesuai dengan salah satu kolom di geodataframe.

Sejauh ini saya memiliki kode berikut:

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]);

Tapi saya mendapatkan kesalahan berikut: TypeError: cannot convert the series to <class 'float'>

Ada ide?


Apakah ini semua kodenya?
Fezter

@Febur itu saja kode untuk menggambar peta. Ada lebih banyak kode untuk membangun geodataframe tetapi itu tampaknya tidak relevan di sini. Apakah ada hal penting yang hilang di sini? Terima kasih.
Juan Francisco Saldarriaga

Apa jenis bidang dari Pop_2005? Apakah itu mengambang atau int?
Fezter

3
Mungkinkah Anda hanya dapat menetapkan ukuran marker tunggal, dan mengharapkan nilai float tunggal dan bukan seri / daftar / tupel atau float?
derNincompoop

1
Apakah itu layak dicor Pop_2005secara eksplisit ke float atau integer? geo_df['Pop_2005'] = geo_df['Pop_2005'].astype(float)
om_henners

Jawaban:


7

Dalam geopanda> = 0,3 (dirilis September 2017), plot poin didasarkan pada scattermetode plot matplotlib di bawah tenda, dan ini menerima markersize variabel.

Jadi sekarang Anda benar-benar dapat mengirimkan kolom ke markersize, apa yang OP lakukan dalam pertanyaan awal:

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'])

memberi:

masukkan deskripsi gambar di sini

Tentu saja, jika tujuan Anda hanyalah mengubah markersize ke nilai konstan yang berbeda, Anda masih bisa meneruskan satu float ke kata kunci:

cities.plot(markersize=10)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.