使用底图和 Pandas 的 AssertionError

AssertionError using Basemap and Pandas

我正在尝试按照此处的教程进行操作:

http://nbviewer.ipython.org/github/ehmatthes/intro_programming/blob/master/notebooks/visualization_earthquakes.ipynb#install_standard

但是,我使用 pandas 而不是 python 的内置 csv 模块。我的代码如下:

import pandas as pd
eq_data = pd.read_csv('earthquake_data.csv')
map2 = Basemap(projection='robin'
               , resolution='l'
               , area_thresh=1000.0
               , lat_0=0
               , lon_0=0)

map2.drawcoastlines()
map2.drawcountries()
map2.fillcontinents(color = 'gray')
map2.drawmapboundary()
map2.drawmeridians(np.arange(0, 360, 30))
map2.drawparallels(np.arange(-90, 90, 30))

x,y = map2(eq_data['longitude'].values, eq_data['latitude'].values)

map2.plot(x,y, marker='0', markercolor='red', markersize=6)

这会产生 AssertionError 但没有描述:

AssertionError                            Traceback (most recent call last)
<ipython-input-64-d3426e1f175d> in <module>()
     14 x,y = map2(range(20), range(20))#eq_data['longitude'].values, eq_data['latitude'].values)
     15 
---> 16 map2.plot(x,y, marker='0', markercolor='red', markersize=6)

c:\Python27\lib\site-packages\mpl_toolkits\basemap\__init__.pyc in with_transform(self, x, y, *args, **kwargs)
    540             # convert lat/lon coords to map projection coords.
    541             x, y = self(x,y)
--> 542         return plotfunc(self,x,y,*args,**kwargs)
    543     return with_transform
    544 

c:\Python27\lib\site-packages\mpl_toolkits\basemap\__init__.pyc in plot(self, *args, **kwargs)
   3263             ax.hold(h)
   3264         try:
-> 3265             ret =  ax.plot(*args, **kwargs)
   3266         except:
   3267             ax.hold(b)

c:\Python27\lib\site-packages\matplotlib\axes.pyc in plot(self, *args, **kwargs)
   4135         lines = []
   4136 
-> 4137         for line in self._get_lines(*args, **kwargs):
   4138             self.add_line(line)
   4139             lines.append(line)

c:\Python27\lib\site-packages\matplotlib\axes.pyc in _grab_next_args(self, *args, **kwargs)
    315                 return
    316             if len(remaining) <= 3:
--> 317                 for seg in self._plot_args(remaining, kwargs):
    318                     yield seg
    319                 return

c:\Python27\lib\site-packages\matplotlib\axes.pyc in _plot_args(self, tup, kwargs)
    303         ncx, ncy = x.shape[1], y.shape[1]
    304         for j in xrange(max(ncx, ncy)):
--> 305             seg = func(x[:, j % ncx], y[:, j % ncy], kw, kwargs)
    306             ret.append(seg)
    307         return ret

c:\Python27\lib\site-packages\matplotlib\axes.pyc in _makeline(self, x, y, kw, kwargs)
    255                             **kw
    256                             )
--> 257         self.set_lineprops(seg, **kwargs)
    258         return seg
    259 

c:\Python27\lib\site-packages\matplotlib\axes.pyc in set_lineprops(self, line, **kwargs)
    198                 raise TypeError('There is no line property "%s"' % key)
    199             func = getattr(line, funcName)
--> 200             func(val)
    201 
    202     def set_patchprops(self, fill_poly, **kwargs):

c:\Python27\lib\site-packages\matplotlib\lines.pyc in set_marker(self, marker)
    851 
    852         """
--> 853         self._marker.set_marker(marker)
    854 
    855     def set_markeredgecolor(self, ec):

c:\Python27\lib\site-packages\matplotlib\markers.pyc in set_marker(self, marker)
    231         else:
    232             try:
--> 233                 Path(marker)
    234                 self._marker_function = self._set_vertices
    235             except ValueError:

c:\Python27\lib\site-packages\matplotlib\path.pyc in __init__(self, vertices, codes, _interpolation_steps, closed, readonly)
    145             codes[-1] = self.CLOSEPOLY
    146 
--> 147         assert vertices.ndim == 2
    148         assert vertices.shape[1] == 2
    149 

AssertionError: 

我认为我遇到了问题,因为 pandas 的更新不再允许像您以前那样传递系列,如下所述:

Runtime error using python basemap and pyproj?

但是如您所见,我为此调整了代码,但并没有解决问题。至此我迷路了。

我在 windows 服务器 2012 x64 上使用 Python 2.7.6、pandas 0.15.2 和底图 1.0.7。

我的代码有两个问题。首先,map2 对象的绘图函数是从 matplotlib 继承的。因此 marker 属性不能是 '0' 它需要是 'o'。此外,没有 markercolor 属性。它被称为color。下面的代码应该可以工作。

import pandas as pd
eq_data = pd.read_csv('earthquake_data.csv')
map2 = Basemap(projection='robin'
               , resolution='l'
               , area_thresh=1000.0
               , lat_0=0
               , lon_0=0)

map2.drawcoastlines()
map2.drawcountries()
map2.fillcontinents(color = 'gray')
map2.drawmapboundary()
map2.drawmeridians(np.arange(0, 360, 30))
map2.drawparallels(np.arange(-90, 90, 30))

x,y = map2(eq_data['longitude'].values, eq_data['latitude'].values)

map2.plot(x,y, marker='o', color='red', markersize=6, linestyle='')