根据 pandas 数据框中的条件使用不同标记在底图上绘制点
Plot points on basemap with different markers depending on conditions in pandas data frame
我正在使用 matplotlib 底图根据 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)
但是,我希望根据每个 lat/lon 处测量的环境温度使用不同的标记绘制部分轨迹,但以下代码给出了错误:
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
同样,您不需要将系列转换为列表。
我正在使用 matplotlib 底图根据 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)
但是,我希望根据每个 lat/lon 处测量的环境温度使用不同的标记绘制部分轨迹,但以下代码给出了错误:
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
同样,您不需要将系列转换为列表。