Нанесите точки на базовую карту с различными маркерами в зависимости от условий во фрейме данных Pandas. - PullRequest
0 голосов
/ 09 мая 2018

Я использую базовую карту 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)

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

ValueError: Значение истинности Серии неоднозначно. Используйте 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 и есть ли способ обойти это?

Спасибо

1 Ответ

0 голосов
/ 10 мая 2018

Прежде всего ваш условный ряд может быть пустым. Вы должны это проверить.

Для построения условных рядов посмотрите на этот пример:

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()

enter image description here

Тестовый вывод:

    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

Также вам не нужно преобразовывать серии в списки.

...