使用 pandas 根据另一列的值在地图上绘制数据框的选定列
Issue plotting selected columns of a data-frame on a map based on the values of another column using pandas
我是 python 编程新手。
我有一个超过 1000 行的 csv 文件。我想根据地图上列(峰值电流)的值绘制列(纬度和经度)。每当我使用 pandas DataFrame 加载数据时,我通常会收到错误消息。但是,当我键入纬度和经度的值(前 10 个值)时,一切似乎都正常。尽管我无法根据数据框中的峰值电流为所选数据点绘制 lat/long。我想知道该怎么做。非常感谢任何帮助。
这是我的代码
from mpl_toolkits.basemap import Basemap
import matplotlib.lines as mlines
import matplotlib.pyplot as plt
from PIL import Image
import numpy as np
import pandas as pd
lon_0=2
#Loading data
#df = pd.read_csv('file.csv')
#lons = df['longitude']
#lat = df['latitude']
lons = [30.59294,30.593789,30.586066,30.648234,30.646268,30.633628,30.66251,29.531931,30.656409,30.708208]
lat = [-26.67026,-26.651906,-26.650199,-27.012214,-27.002663,-26.982482,-26.739707,-26.795177,-26.995863,-26.766377]
#coordinates
#llcrnrlat,llcrnrlon,urcrnrlat,urcrnrlon
# are the lat/lon values of the lower left and upper right corners of the map.
# lat_ts is the latitude of true scale.
m = Basemap(projection='geos',lon_0=lon_0,resolution='l',\
llcrnrlat=-36,urcrnrlat=-21,llcrnrlon=15,urcrnrlon=34,)
m.drawcoastlines()
m.drawcountries()
m.drawstates()
# draw parallels and meridians.
parallels = np.arange(-90.,91.,5.)
# Label the meridians and parallels
m.drawparallels(parallels,labels=[False,True,True,False])
# Draw Meridians and Labels
meridians = np.arange(-180.,181.,10.)
m.drawmeridians(meridians,labels=[True,False,False,True])
m.drawmapboundary(fill_color='white')
x,y = m(lons, lat)
plt.plot(x, y, '*',markersize=5)
plt.show()
如果我取消注释下面的行以使用 pandas
加载数据,我通常会收到错误消息
#df = pd.read_csv('file.csv')
#lons = df['longitude']
#lat = df['latitude']
这是我要加载的部分数据
timestamp latitude longitude peakcurrent icheight numbersensors majoraxis minoraxis bearing
2016-01-07T19:00:00.206710100 -26.67026 30.59294 -38161 0 6 0.1 0.1 10.9
2016-01-07T19:00:00.262988806 -26.651906 30.593789 -49949 0 6 0.1 0.1 13.9
2016-01-07T19:00:00.387655020 -26.650199 30.586066 27485 0 6 0.51 0.24 10.9
2016-01-07T19:00:02.242107391 -27.012214 30.648234 -39139 0 6 0.79 0.2 20.9
2016-01-07T19:00:02.353171110 -27.002663 30.646268 53449 0 6 0.17 0.11 13.3
2016-01-07T19:00:02.410721779 -26.982482 30.633628 -31396 0 6 0.95 0.64 33.9
2016-01-07T19:00:02.446598530 -26.739707 30.66251 53774 0 6 0.66 0.12 13.5
2016-01-07T19:00:02.452036619 -26.795177 29.531931 -36773 0 6 2 0.37 39
2016-01-07T19:00:02.524655104 -26.995863 30.656409 33640 0 6 1.5 0.37 33.7
2016-01-07T19:00:02.617701054 -26.766377 30.708208 -74489 0 7 1.23 0.37 21
您需要适当地获取 long
和 lat
的值。这是更正的相关代码。
# ...
lons = df.longitude.values # needs .values here
lats = df.latitude.values # same as above
x, y = m(lons, lats)
plt.plot(x, y, '*', markersize=60, zorder=20, alpha=0.3)
plt.show()
输出图将(使用示例数据)类似于:
我是 python 编程新手。 我有一个超过 1000 行的 csv 文件。我想根据地图上列(峰值电流)的值绘制列(纬度和经度)。每当我使用 pandas DataFrame 加载数据时,我通常会收到错误消息。但是,当我键入纬度和经度的值(前 10 个值)时,一切似乎都正常。尽管我无法根据数据框中的峰值电流为所选数据点绘制 lat/long。我想知道该怎么做。非常感谢任何帮助。
这是我的代码
from mpl_toolkits.basemap import Basemap
import matplotlib.lines as mlines
import matplotlib.pyplot as plt
from PIL import Image
import numpy as np
import pandas as pd
lon_0=2
#Loading data
#df = pd.read_csv('file.csv')
#lons = df['longitude']
#lat = df['latitude']
lons = [30.59294,30.593789,30.586066,30.648234,30.646268,30.633628,30.66251,29.531931,30.656409,30.708208]
lat = [-26.67026,-26.651906,-26.650199,-27.012214,-27.002663,-26.982482,-26.739707,-26.795177,-26.995863,-26.766377]
#coordinates
#llcrnrlat,llcrnrlon,urcrnrlat,urcrnrlon
# are the lat/lon values of the lower left and upper right corners of the map.
# lat_ts is the latitude of true scale.
m = Basemap(projection='geos',lon_0=lon_0,resolution='l',\
llcrnrlat=-36,urcrnrlat=-21,llcrnrlon=15,urcrnrlon=34,)
m.drawcoastlines()
m.drawcountries()
m.drawstates()
# draw parallels and meridians.
parallels = np.arange(-90.,91.,5.)
# Label the meridians and parallels
m.drawparallels(parallels,labels=[False,True,True,False])
# Draw Meridians and Labels
meridians = np.arange(-180.,181.,10.)
m.drawmeridians(meridians,labels=[True,False,False,True])
m.drawmapboundary(fill_color='white')
x,y = m(lons, lat)
plt.plot(x, y, '*',markersize=5)
plt.show()
如果我取消注释下面的行以使用 pandas
加载数据,我通常会收到错误消息#df = pd.read_csv('file.csv')
#lons = df['longitude']
#lat = df['latitude']
这是我要加载的部分数据
timestamp latitude longitude peakcurrent icheight numbersensors majoraxis minoraxis bearing
2016-01-07T19:00:00.206710100 -26.67026 30.59294 -38161 0 6 0.1 0.1 10.9
2016-01-07T19:00:00.262988806 -26.651906 30.593789 -49949 0 6 0.1 0.1 13.9
2016-01-07T19:00:00.387655020 -26.650199 30.586066 27485 0 6 0.51 0.24 10.9
2016-01-07T19:00:02.242107391 -27.012214 30.648234 -39139 0 6 0.79 0.2 20.9
2016-01-07T19:00:02.353171110 -27.002663 30.646268 53449 0 6 0.17 0.11 13.3
2016-01-07T19:00:02.410721779 -26.982482 30.633628 -31396 0 6 0.95 0.64 33.9
2016-01-07T19:00:02.446598530 -26.739707 30.66251 53774 0 6 0.66 0.12 13.5
2016-01-07T19:00:02.452036619 -26.795177 29.531931 -36773 0 6 2 0.37 39
2016-01-07T19:00:02.524655104 -26.995863 30.656409 33640 0 6 1.5 0.37 33.7
2016-01-07T19:00:02.617701054 -26.766377 30.708208 -74489 0 7 1.23 0.37 21
您需要适当地获取 long
和 lat
的值。这是更正的相关代码。
# ...
lons = df.longitude.values # needs .values here
lats = df.latitude.values # same as above
x, y = m(lons, lats)
plt.plot(x, y, '*', markersize=60, zorder=20, alpha=0.3)
plt.show()
输出图将(使用示例数据)类似于: