gpt4 book ai didi

python - 等值线图如何与 Python 中的阴影栅格相结合?

转载 作者:行者123 更新时间:2023-12-05 02:56:27 29 4
gpt4 key购买 nike

我想在 map 上绘制区域特征,但由于人口密度非常不均匀,较大的图 block 会误导性地吸引注意力。想想邮政编码的平均值(比如考试成绩)。

高分辨率 map 可用于区分有人居住的地点,甚至是其中的密度。下面的 Python 代码确实会根据每个像素的平均此类密度生成彩色栅格。

但是,我真正需要的是从同一区域(在本例中为匈牙利的邮政编码)的等值线图着色,但着色只影响无论如何都会出现在栅格上的点。光栅只能确定像素的 Gamma (或者可能是某些 3D 模拟中的高度)。解决这个问题的好方法是什么?

rasterio.mask.mask 不知何故?

(顺便说一句,用邮政编码边界覆盖也很好,但我更好地理解了它如何与 GeoViews 一起工作。)

import rasterio
import os
import datashader as ds
from datashader import transfer_functions as tf
import xarray as xr
from matplotlib.cm import viridis

# download a GeoTIFF from this location: https://data.humdata.org/dataset/hungary-high-resolution-population-density-maps-demographic-estimates
data_path = '~/Downloads/'
file_name = 'HUN_youth_15_24.tif' # young people
file_path = os.path.join(data_path, file_name)
src = rasterio.open(file_path)
da = xr.open_rasterio(file_path)
cvs = ds.Canvas(plot_width=5120, plot_height=2880)
img = tf.shade(cvs.raster(da,layer=1), cmap=viridis)
ds.utils.export_image(img, "map", export_path=data_path, fmt=".png")

最佳答案

我不确定我是否理解,所以如果我弄错了请告诉我。如果我理解得很好,您可以仅使用 numpy 实现您想要的(我相信将其转换为 xarray 会很容易):

# ---- snipped code already in the question -----
import numpy as np
import matplotlib.pyplot as plt

# fake a choropleth in a dirty, fast way
height, width = 2880, 5120
choropleth = np.empty((height, width, 3,), dtype=np.uint8)
CHUNKS = 10
x_size = width // CHUNKS
for x_step, x in enumerate(range(0, width, width // CHUNKS)):
y_size = height // CHUNKS
for y_step, y in enumerate(range(0, height, height // CHUNKS)):
choropleth[y: y+y_size, x: x+x_size] = (255-x_step*255//CHUNKS,
0, y_step*255//CHUNKS)
plt.figure("Fake Choropleth")
plt.imshow(choropleth)

# Option 1: play with alpha only
outimage = np.empty((height, width, 4,), dtype=np.uint8) # RGBA image
outimage[:, :, 3] = img # Set alpha channel
outimage[:, :, :3] = choropleth # Set color
plt.figure("Alpha filter only")
plt.imshow(outimage)

# Option 2: clear the empty points
outimage[img == 0, :3] = 0 # White. use 0 for black
plt.figure("Points erased")
plt.imshow(outimage[:,:,:3]) # change to 'outimage' to see the image with alpha

结果:虚拟 choroplet Choroplet

Alpha 过滤图 Only alpha filter

黑色背景,无 alpha 滤镜 No alpha filter请注意,由于 matplotlib 的抗锯齿功能,图像可能看起来有所不同。

关于python - 等值线图如何与 Python 中的阴影栅格相结合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60578819/

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