繁体   English   中英

AttributeError:在邮政编码 shp 文件中绘制事件的 Geopandas 中的未知属性列

[英]AttributeError: Unknown property column in Geopandas plotting of events in zipcode shp file

我正在尝试创建一个 Choropleth 地图,显示整个北卡罗来纳州一个县的火灾事件。 我在 Dataframe 中有数据,昨晚我能够导出地图。 唯一的问题是导出的数据不准确——所以我的代码有问题。 我想我设法通过将 shapefile 和数据数据帧合并在一起来解决这个问题,但是现在,当我运行创建地图的部分时,我收到AttributeError: Unknown property column Full 消息:

AttributeError                            Traceback (most recent call last)
<ipython-input-74-61a60b41abbe> in <module>()
    13 # create map
    14 
---> 15 merged_df.plot(column=variable, cmap='Reds', linewidth=0.8, ax=ax, edgecolor='0.8');
    16 
    17 ax.axis('off')

~\Anaconda3\lib\site-packages\pandas\plotting\_core.py in __call__(self, x, y, kind, ax, subplots, sharex, sharey, layout, figsize, use_index, title, grid, legend, style, logx, logy, loglog, xticks, yticks, xlim, ylim, rot, fontsize, colormap, table, yerr, xerr, secondary_y, sort_columns, **kwds)
  2939                           fontsize=fontsize, colormap=colormap, table=table,
  2940                           yerr=yerr, xerr=xerr, secondary_y=secondary_y,
-> 2941                           sort_columns=sort_columns, **kwds)
  2942     __call__.__doc__ = plot_frame.__doc__
  2943 

~\Anaconda3\lib\site-packages\pandas\plotting\_core.py in plot_frame(data, x, y, kind, ax, subplots, sharex, sharey, layout, figsize, use_index, title, grid, legend, style, logx, logy, loglog, xticks, yticks, xlim, ylim, rot, fontsize, colormap, table, yerr, xerr, secondary_y, sort_columns, **kwds)
  1975                  yerr=yerr, xerr=xerr,
  1976                  secondary_y=secondary_y, sort_columns=sort_columns,
-> 1977                  **kwds)
  1978 
  1979 

~\Anaconda3\lib\site-packages\pandas\plotting\_core.py in _plot(data, x, y, subplots, ax, kind, **kwds)
  1802         plot_obj = klass(data, subplots=subplots, ax=ax, kind=kind, **kwds)
  1803 
-> 1804     plot_obj.generate()
  1805     plot_obj.draw()
  1806     return plot_obj.result

~\Anaconda3\lib\site-packages\pandas\plotting\_core.py in generate(self)
   258         self._compute_plot_data()
   259         self._setup_subplots()
--> 260         self._make_plot()
   261         self._add_table()
   262         self._make_legend()

~\Anaconda3\lib\site-packages\pandas\plotting\_core.py in _make_plot(self)
   983                              stacking_id=stacking_id,
   984                              is_errorbar=is_errorbar,
--> 985                              **kwds)
   986             self._add_legend_handle(newlines[0], label, index=i)
   987 

~\Anaconda3\lib\site-packages\pandas\plotting\_core.py in _plot(cls, ax, x, y, style, column_num, stacking_id, **kwds)
   999             cls._initialize_stacker(ax, stacking_id, len(y))
  1000         y_values = cls._get_stacked_values(ax, stacking_id, y, kwds['label'])
-> 1001         lines = MPLPlot._plot(ax, x, y_values, style=style, **kwds)
  1002         cls._update_stacker(ax, stacking_id, y)
  1003         return lines

~\Anaconda3\lib\site-packages\pandas\plotting\_core.py in _plot(cls, ax, x, y, style, is_errorbar, **kwds)
   613             else:
   614                 args = (x, y)
--> 615             return ax.plot(*args, **kwds)
   616 
   617     def _get_index_name(self):

~\Anaconda3\lib\site-packages\matplotlib\__init__.py in inner(ax, data, *args, **kwargs)
  1808                         "the Matplotlib list!)" % (label_namer, func.__name__),
  1809                         RuntimeWarning, stacklevel=2)
-> 1810             return func(ax, *args, **kwargs)
  1811 
  1812         inner.__doc__ = _add_data_doc(inner.__doc__,

~\Anaconda3\lib\site-packages\matplotlib\axes\_axes.py in plot(self, scalex, scaley, *args, **kwargs)
  1609         kwargs = cbook.normalize_kwargs(kwargs, mlines.Line2D._alias_map)
  1610 
-> 1611         for line in self._get_lines(*args, **kwargs):
  1612             self.add_line(line)
  1613             lines.append(line)

~\Anaconda3\lib\site-packages\matplotlib\axes\_base.py in _grab_next_args(self, *args, **kwargs)
   391                 this += args[0],
   392                 args = args[1:]
--> 393             yield from self._plot_args(this, kwargs)
   394 
   395 

~\Anaconda3\lib\site-packages\matplotlib\axes\_base.py in _plot_args(self, tup, kwargs)
   381                                   "with non-matching shapes is deprecated.")
   382         for j in range(max(ncx, ncy)):
--> 383             seg = func(x[:, j % ncx], y[:, j % ncy], kw, kwargs)
   384             ret.append(seg)
   385         return ret

~\Anaconda3\lib\site-packages\matplotlib\axes\_base.py in _makeline(self, x, y, kw, kwargs)
   286         default_dict = self._getdefaults(None, kw)
   287         self._setdefaults(default_dict, kw)
--> 288         seg = mlines.Line2D(x, y, **kw)
   289         return seg
   290 

~\Anaconda3\lib\site-packages\matplotlib\lines.py in __init__(self, xdata, ydata, linewidth, linestyle, color, marker, markersize, markeredgewidth, markeredgecolor, markerfacecolor, markerfacecoloralt, fillstyle, antialiased, dash_capstyle, solid_capstyle, dash_joinstyle, solid_joinstyle, pickradius, drawstyle, markevery, **kwargs)
   408         # update kwargs before updating data to give the caller a
   409         # chance to init axes (and hence unit support)
--> 410         self.update(kwargs)
   411         self.pickradius = pickradius
   412         self.ind_offset = 0

~\Anaconda3\lib\site-packages\matplotlib\artist.py in update(self, props)
   914 
   915         with cbook._setattr_cm(self, eventson=False):
--> 916             ret = [_update_property(self, k, v) for k, v in props.items()]
   917 
   918         if len(ret):

~\Anaconda3\lib\site-packages\matplotlib\artist.py in <listcomp>(.0)
   914 
   915         with cbook._setattr_cm(self, eventson=False):
--> 916             ret = [_update_property(self, k, v) for k, v in props.items()]
   917 
   918         if len(ret):

~\Anaconda3\lib\site-packages\matplotlib\artist.py in _update_property(self, k, v)
   910                 func = getattr(self, 'set_' + k, None)
   911                 if not callable(func):
--> 912                     raise AttributeError('Unknown property %s' % k)
   913                 return func(v)
   914 

AttributeError: Unknown property column

我不知道如何解决这个问题。 我用谷歌搜索并尝试将 dtype 从 float 更改为 int,尝试了不同的列,但没有任何变化。 我不明白,因为它昨晚起作用了,但是当我今天尝试在进行更改之前运行它时却不起作用。 预先感谢您的任何帮助。 下面是我的大部分代码,其中包含数据框和映射,其他一切都只是从 csvs 获取数据:

import pandas as pd
import numpy as np
#import googlemaps
import gmaps
import gmaps.datasets
import geopandas as gpd
#import matplotlib as plt
import matplotlib.pyplot as plt
import os
import plotly.plotly as py
import plotly.tools as tls

这是合并后的数据框的样子: 在此处输入图片说明

OBJECTID_x                     int64
ZIPNUM                       float64
address                       object
address2                      object
apt_room                      object
arrive_date_time              object
cleared_date_time             object
dispatch_date_time            object
exposure                       int64
incident_number               object
incident_type                  int64
incident_type_description     object
platoon                       object
station                      float64
Longitude                     object
Latitude                      object
Year                           int64
Date                          object
Arr Time                      object
Seconds                      float64
Incident                      object
OBJECTID_y                     int64
ZIPNAME                       object
ZIPCODE                       object
NAME                          object
SHAPEAREA                    float64
SHAPELEN                     float64
LAST_EDITE                    object
geometry                      object
dtype: object
# set a variable that will call column to visualise on the map

variable = 'ZIPNUM'

# set the range for the choropleth

vmin, vmax = 50, 2000

# create figure and axes for Matplotlib

fig, ax = plt.subplots(1, figsize=(15, 15))

# create map

merged_df.plot(column=variable, cmap='Reds', linewidth=0.8, ax=ax, edgecolor='0.8');

ax.axis('off')

ax.set_title('Fire Incident Rate in Wake County', fontdict={'fontsize': '25', 'fontweight' : '3'})

# Create colorbar as a legend

sm = plt.cm.ScalarMappable(cmap='Reds', norm=plt.Normalize(vmin=vmin, vmax=vmax))

# empty array for the data range

sm._A = []

# add the colorbar to the figure

cbar = fig.colorbar(sm)

ax.annotate('2008-2018',
            xy=(0.001, .225), xycoords='figure fraction',
            horizontalalignment='left', verticalalignment='top',
            fontsize=35)

fig.savefig("Fire Incident Rate in Wake County 2008-2018.png", dpi=300)

问题是您试图使用column作为关键字参数。 由于您想绘制存储在名为variable的变量中的 DataFrame 的'ZIPNUM'列,您可以将其作为位置参数传递给plot() 如果你想绘制两个变量之间的关系,你可以使用关键字参数merged_df.plot(x=variable1, y=variable2)

对于你的情况,你可以使用

variable = 'ZIPNUM'
merged_df.plot(variable, cmap='Reds', linewidth=0.8, ax=ax, edgecolor='0.8');

编辑(基于评论)

当您使用marker进行绘图时才应使用marker markeredgecolor edgecolor不是正确的关键字。 此外,您正在分配一个数字(字符串)作为颜色,这又是不正确的。 下面是一个简单的例子。

df = pd.DataFrame([[1, 2], [3, 4], [5, 6], [7, 8]], columns=["A", "B"])
column='A'
df.plot(column, linewidth=0.8, color='r', marker ='o', markeredgewidth=2,
        markeredgecolor='blue')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM