gpt4 book ai didi

python - 如何向 basemap 中的各个多边形添加点画或阴影线?

转载 作者:太空宇宙 更新时间:2023-11-03 15:10:24 25 4
gpt4 key购买 nike

我正在尝试在代表美国某个州的县的特定多边形上添加阴影。每个多边形的填充与该特定县的杂货店数量相关。孵化代表每个县成人糖尿病发病率的 5 个级别(从最高到最低的范围)。

我遇到过各种可能的实现方法,但每次我都感到困惑。

-我在这里看到了一篇文章,其中有人使用笛卡尔包来绘制单个多边形,但就像我见过的关于此的其他文章一样,我不确定是否必须这样做使用 GeoJSON 坐标作为多边形?我通过 pyshp 包获得了每个多边形的坐标,这些坐标是正确的使用坐标吗?我感觉他们不是..

笛卡尔示例:https://gis.stackexchange.com/questions/197945/geopandas-polygon-to-matplotlib-patches-polygon-conversion

来自pyshp包的坐标示例:

from area import area
sf = shapefile.Reader("county_az.shp")
Shapes = sf.shapes()
bbox = Shapes[3].bbox

#1
[-12296461.118197802, 3675955.2075050175, -12139158.....]

#2
[-12618534.046562605, 4063552.9669038206, -12328686.313377801, ....]

#3
[-12436701.142463798, 3893144.9847336784, -12245216.013980595, ...]

-当我遇到等值线图时,我的问题是它适用于整个图,我无法限制特定多边形的纬度和经度范围,因为没有足够的值。我相信我在剪辑方面也有同样的问题。

如下所示:Hatch area using pcolormesh in Basemap

我应该注意到,我的绘图数据是一个 shapefile,并且我有关于 2010 年成人糖尿病发病率、每个县的杂货店以及其他变量的列。

有没有办法在 basemap 上的各个多边形上进行孵化?

最佳答案

如果 shape.shp 文件中的形状,您可以将其提供给 matplotlib.patches.Polygon 并添加一些填充使用 hatch 参数。

p= Polygon(np.array(shape), fill=False, hatch="X")
plt.gca().add_artist(p)

一个完整的例子:

from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
from matplotlib.patches import Polygon
import numpy as np

m = Basemap(llcrnrlon=-10,llcrnrlat=35,urcrnrlon=35,urcrnrlat=60.,
resolution='i', projection='tmerc', lat_0 = 48.9, lon_0 = 15.3)

m.drawcoastlines()

# shape file from
# http://www.naturalearthdata.com/downloads/10m-cultural-vectors/10m-admin-0-countries/
fn = r"ne_10m_admin_0_countries\ne_10m_admin_0_countries"
m.readshapefile(fn, 'shf', drawbounds = False)
# here, 'shf' is the name we later use to access the shapes.

#Madrid
x,y = m([-3.703889],[40.4125])
m.plot(x,y, marker="o", color="k", label="Madrid", ls="")

hatches = ["\\\\","++", "XX"]
countries = ['Spain', 'Ireland', "Belgium"]
hatchdic = dict(zip(countries, hatches))
shapes = {}
for info, shape in zip(m.shf_info, m.shf):
if info['NAME'] in countries:
p= Polygon(np.array(shape), fill=False, hatch=hatchdic[info['NAME']])
shapes.update({info['NAME'] : p})

for country in countries:
plt.gca().add_artist(shapes[country])

handles, labels = plt.gca().get_legend_handles_labels()
handles.extend([shapes[c] for c in countries])
labels.extend(countries)
plt.legend(handles=handles, labels=labels, handleheight=3, handlelength=3, framealpha=1. )

plt.show()

enter image description here

关于python - 如何向 basemap 中的各个多边形添加点画或阴影线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44250350/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com