- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
用 shapefile 绘制热图
代码在这里:
map = Basemap(llcrnrlon=xc1,llcrnrlat=yc1,urcrnrlon=xc2,urcrnrlat=yc2)
##Assuming "shape.shp" is my shapefile
map.readshapefile('./shape','shape',zorder =1,)
patches=[]
cs=plt.cm.Greens(np.arange(18)/18.)
for info, shape in zip(map.shape_info, map.shape):
x,y=zip(*shape)
patches.append( Polygon(np.array(shape), True) ) # facecolor= '#6582B3'
ax.add_collection(PatchCollection(patches, facecolor= cs,edgecolor='none',
linewidths=1.5, zorder=2))
## scatter the point, assuming "pt" is the Dataframe
pt_lat = pt.lat.as_matrix()
pt_lon = power.lon.as_matrix()
plt.scatter(pt_lon,pt_lat,marker='o',s=50,lw= 0,zorder = 3, alpha = 0.75)
图片在这里:
http://i11.tietuku.com/9785abb6097b7c0e.png
在上图中,每个shapefile的颜色都是基于预定义的colormap。
- Plotting Each area (In my case, 18 shapefile) with the color corresponding to the sum of pt.values within.
- In other words, the inner point data decide the shapefile's color
感谢@MaxNoe 的回答。
学习了你的代码,但还是有问题。
这是我的代码和图片:
fig = plt.figure(figsize =(8,6))
ax = plt.subplot()
map = Basemap(llcrnrlon=xc1,llcrnrlat=yc1,urcrnrlon=xc2,urcrnrlat=yc2)
map.readshapefile('./shape','shape')
patches=[]
for info, shape in zip(map.shape_info, map.shape):
x,y=zip(*shape)
patches.append(Polygon(np.array(shape), True) )
xx = pt.lon.iloc[:].as_matrix()
yy = pt.lat.iloc[:].as_matrix()
value = pt.value.iloc[:].as_matrix()
sh = (len(xx),2)
position = np.zeros(len(xx)*2).reshape(*sh)
for i in range(0,len(xx),1):
position[i] = np.array([xx[i],yy[i]])
poly_values = []
for patch in patches:
mask = np.array([patch.contains_point(xy) for xy in position])
poly_values.append(value[mask].sum())
coll = PatchCollection(patches, cmap = 'Greens')
coll.set_array(np.array(poly_values))
ax.add_collection(coll)
plt.colorbar(coll,label = "polygon")
point_plot = plt.scatter(xx,yy,marker='o',s=80,lw= 0,zorder = 3, c = "r",alpha = 0.75)
ax.set_frame_on(False)
divider = make_axes_locatable(ax)
cax = divider.append_axes("right", size="4%", pad=0.1)
cbar = plt.colorbar(coll,label = "polygon",cax= cax)
http://i4.tietuku.com/9a7b0cbc16f2e0b0.png
- It seems like the color for polygon[i] isn't according to the poly_value[i]
- I think the problem is
coll.set_array
doesn't work.- Otherwise, I have checked each polygon and the scatter point value within, the poly_value[i] and the actual condition is not match(bigger than reality). I think the I may use value.mask wrong.
最佳答案
您可以使用 Polygon.contains_point
检查点是否在其中。
我使用此函数创建一个 bool 掩码来寻址该多边形内的点,并使用 .sum()
获取此多边形的值。
然后我使用 PatchCollection.set_array
设置值。
这是代码(没有 basemap ,因为我没有形状文件):
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Polygon
from matplotlib.collections import PatchCollection
# some random numbers for demonstration
data = np.random.normal(0, 1, (100, 2))
value = np.random.normal(0, 1, 100)
polygons = [
Polygon([(0, 0), (0, 3), (-3, 3), (-3, 0)], closed=True),
Polygon([(0, 0), (0, -3), (-3, -3), (-3, 0)], closed=True),
Polygon([(0, 0), (0, 3), (3, 3), (3, 0)], closed=True),
Polygon([(0, 0), (0, -3), (3, -3), (3, 0)], closed=True),
]
poly_values = []
for poly in polygons:
mask = np.array([poly.contains_point(xy) for xy in data])
poly_values.append(value[mask].sum())
coll = PatchCollection(polygons, cmap='magma')
coll.set_array(np.array(poly_values))
fig, ax = plt.subplots()
ax.add_collection(coll)
points = ax.scatter(data[:, 0], data[:, 1], c=value, cmap='viridis', linewidth=0)
fig.colorbar(coll, label='polygons')
fig.colorbar(points, label='points')
plt.show()
关于python - 绘制由散点数据决定颜色的Shapefile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34706562/
我想为 H3 生成 shapefile特定地理区域的六边形。特别是,我对分辨率为 6、7 和 9 的湾区感兴趣。如何为覆盖该区域的六边形创建 shapefile? 我是 shapefile 或任何其他
我有一个形状文件 (Sample.shp) 以及其他两个文件(Sample.shx 和 Sample.dbf),其中为孟买的 15 个 pincode 定义了几何图形(多边形)。 我可以使用快速入门教
我已经在这方面工作了一段时间并且取得了一些成功,但是在重写文件时,我没有。 我正在使用的 shapefile 是都市和小都市地区的多边形形状文件,但我对小都市地区不感兴趣,所以我正在使用 R 中的 s
我下载了波士顿的 shapefile,并想使用下面的代码将其绘制出来。然而它给了我一个错误 ValueError: lat_0 必须在 -90.000000 和 90.000000 度之间 原来coo
我正在使用 {raster} 来根据不规则形状文件(亚马逊生物群落)剪辑(或裁剪)栅格,但输出始终具有矩形范围。但是,我需要形状文件的完全相同的几何形状的输出。有小费吗?干杯。 library(ras
在 fiona 1.5.0 上(我很困惑为什么各种文件(例如 .dbf 和 .gdb)不打印我的“不是 Shapefile!”(这是我想要的文件不是 . shp) 退出前警告。 import fion
我正在尝试使用 python 中的 matplotlib 在世界地图上绘制国家/地区的填充多边形。 我有一个包含每个国家/地区边界坐标的 shapefile。现在,我想使用 matplotlib 将这
我使用 postgresql 9.1,postgis 2.0.1。为了将 shapefile 导入我的数据库,我使用 shp2pgsql。我尝试了很多导入这些 shapefile 的方法(shp2pg
有没有办法读取具有特定字符编码的形状文件?我正在尝试读取在某些名称中包含特殊(法语)字符的加拿大 shapefile。我可以手动转换它们,但如果我对某处的设置一无所知,我宁愿不这样做。 # manua
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
library(raster) admin <- getData('GADM', country='FRA', level=2) set.seed(123) id <- data.frame(ID_2
我目前有一个英国的 shapefile,并绘制了英国不同地区的物种种群。到目前为止,我刚刚绘制了 3 个物种种群水平,并将它们着色为红色 = 高、橙色 = 中、绿色 = 低。但我想做的是有一个渐变图,
Facebook 构建了它所谓的 relative wealth index适用于全局 > 1900 万个微型区域(2.4 公里网格单元)。他们已经 shared the data ( zip ) 在
在阅读了大量帖子和网站后,我无法找到如何从我的经纬度数据表中创建多边形 shapefile。我想创建这样的 map 。 我的csv数据文件包含地中海1000个点的经度、纬度和属性。我想按属性创建 sh
你好我尝试实现传单插入,以显示本地托管的 shapefile。 shapefile 的显示有效,但我想添加一个图层控件(用于切换 shapefile 图层)。插件链接:https://github.c
使用下面的代码,我可以创建一条折线并将其写入形状文件。但我也想读取Polyline类型的形状文件并将Point转换为x:f64和y:f64。 use shapefile::{Point, Polyli
我有一个包含亚马逊大河的 shapefile。仅 shapefile 就有 37.9 MB,连同属性表高达 42.1 MB。我正在生成所有巴西亚马逊的 PNG 图像,每个 1260x940 像素,sh
我正在尝试导入这样的形状文件: fn <- "Proj1" my_shp <- readShapeSpatial(fn) 在 Windows 计算机(32 位)上它工作正常,但是当我在 Ubuntu
我有一个导出 ArcGIS map 点的应用程序。 Spring MVC Controller 中的接收点。 我的指针有一个可变的属性列表。属性是具有两个值(名称和值)的字符串列表。代码: publi
我正在编写一个 map 应用程序,用于导入人口普查和 USGS 信息并将其显示为 Google map 上的叠加层。我想导出这些项目的混搭并导出为 Shapefile . 我使用 geotools 库
我是一名优秀的程序员,十分优秀!