Skip to main content
 首页 » 编程设计

python之根据 Pandas 数据框中的条件,在 basemap 上绘制具有不同标记的点

2024年09月07日3652php

我正在使用 matplotlib basemap 根据 pandas 数据框中的数据绘制轨迹。

简单地绘制纬度、经度数据如下:

map = Basemap(projection='stere',lon_0=lon,lat_0=lat, llcrnrlon=-65, llcrnrlat=55, urcrnrlon=50 , urcrnrlat=75) 
 
map.drawcountries() 
map.bluemarble() 
 
#Place marker at Kangerlussuaq 
x,y = map(lon, lat) 
map.plot(x, y, 'bo', markersize=10)  
plt.text(x, y, ' Kangerlussuaq', fontsize=12) 
 
#Plot trajectory 
map.plot(datacopy.long.tolist(),  
            datacopy.lat.tolist(),  
            'r-',  
            latlon=True) 

但是,我希望根据在每个纬度/经度处测量的环境温度使用不同的标记绘制部分轨迹,但以下代码给出了错误:

ValueError:Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。

if datacopy['Ambient temp']<280: 
map.plot(datacopy.long.tolist(),  
        datacopy.lat.tolist(),  
        'r-',  
        latlon=True) 
else:  
    map.plot(datacopy.long.tolist(),  
            datacopy.lat.tolist(),  
            'b-',  
            latlon=True) 

此错误是否是由于数据位于 pandas 数据框中,是否有解决方法?

谢谢

请您参考如下方法:

首先,您的条件系列可能为空。你必须检查它。

要绘制条件序列,请看这个例子:

import pandas as pd 
import numpy as np 
import matplotlib.pylab as plt 
 
# Create a dataframe 
df = pd.DataFrame( {'lat':[1,2,3,4,5], 'long':[1,2,3,4,5],  'T': [42, 52, 36, 24, 70]}) 
print (df) 
 
plt.figure(figsize = (5, 5)) 
 
# selection condition 
df1 = df[(df['T'] < 50)] 
# ~ means not 
df2 = df[~(df['T'] < 50)] 
print(df2) 
print(df1) 
# plot 
plt.plot(df1.long, df1.lat, 'b+') 
ax = plt.gca() 
ax.plot(df2.long, df2.lat, 'r*') 
 
plt.show() 

测试输出:

    T  lat  long 
0  42    1     1 
1  52    2     2 
2  36    3     3 
3  24    4     4 
4  70    5     5 
    T  lat  long 
1  52    2     2 
4  70    5     5 
    T  lat  long 
0  42    1     1 
2  36    3     3 
3  24    4     4 

同样,您不需要将系列转换为列表。