เปลี่ยนขนาดเครื่องหมายในพล็อตด้วย GeoPandas


10

ฉันมีรหัสทางภูมิศาสตร์กับคะแนนและข้อมูลที่เกี่ยวข้องบางส่วน ฉันต้องการลงจุดบนแผนที่โดยใช้ geopandas และมีขนาดของจุดที่สอดคล้องกับหนึ่งในคอลัมน์ใน geodataframe

จนถึงตอนนี้ฉันมีรหัสต่อไปนี้:

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

@Fezter นั่นคือรหัสทั้งหมดสำหรับการวาดแผนที่ มีรหัสเพิ่มเติมสำหรับการสร้าง Geodataframe แต่ดูเหมือนจะไม่เกี่ยวข้องกันที่นี่ มีอะไรที่สำคัญขาดหายไปที่นี่หรือไม่? ขอบคุณ
Juan Francisco Saldarriaga

Pop_2005 เป็นฟิลด์ประเภทใด มันลอยหรือ int?
Fezter

3
เป็นไปได้หรือไม่ที่คุณจะสามารถตั้งขนาดเครื่องหมายได้เพียงอย่างเดียวและคาดว่าจะมีค่าลอยเพียงค่าเดียวไม่ใช่อนุกรม / list / tuple หรือ float
derNincompoop

1
มันจะมีค่าหล่อPop_2005อย่างชัดเจนเพื่อลอยหรือจำนวนเต็ม? geo_df['Pop_2005'] = geo_df['Pop_2005'].astype(float)
om_henners

คำตอบ:


7

ใน geopandas> = 0.3 (เผยแพร่เมื่อเดือนกันยายน 2017) การวางแผนจุดขึ้นอยู่กับscatterวิธีการลงจุดของ matplotlib ภายใต้ประทุนและสิ่งนี้จะยอมรับเครื่องหมายของตัวแปร

ดังนั้นตอนนี้คุณสามารถส่งผ่านคอลัมน์ไปยังmarkersizeสิ่งที่ OP ทำในคำถามเดิม:

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)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.