我有一个宠物项目,以创建地图的图像,在那里我画道路和其他东西的地形海拔等高线图。它的目的是规划山地自行车路线(过去我用手工绘制了一些矢量图,它们非常适合可视化)。
目前,我在GeoTIFF中下载数字高程模型,从这里: http://www.ecologia.ufrgs.br/labgeo/arquivos/downloads/dados/SRTM/geotiff/rs.rar
然后使用GDAL和Matplotlibcontourf
函数创建绘图:
from osgeo import gdal
import matplotlib
import matplotlib.pyplot as plt
from pylab import cm
import numpy
f = 'rs.tif'
elev = gdal.Open(f)
a = elev.GetRasterBand(1).ReadAsArray()
w = elev.RasterXSize
h = elev.RasterYSize
print w, h
altura = (0.35, 0.42)
largura = (0.70, 0.82)
a = a[int(h*altura[0]):int(h*altura[1]),
int(w*largura[0]):int(w*largura[1])]
cont = plt.contourf(a, origin='upper', cmap=cm.gist_earth, levels=numpy.arange(0,1000,20))
plt.title('Altitudes - max: %d m; min: %d m' % (numpy.amax(a), numpy.amin(a)))
plt.show()
它给出:
问题是等高线是白色的,并且会产生一些视觉污染,这是不希望的,因为我想稍后绘制道路和河流。
因此,我试图通过参数设置或hack(更改源代码)来修改创建这些较轻的行的方法,类似于这里提出的方法:
How to format contour lines from Matplotlib
另外,如果有人知道如何以更优雅的方式生成这样一个地图,使用其他库,我将非常感谢这个提示!
谢谢你的阅读。
尝试将kw参数添加到
plt.contourf(...)
调用:要么lw=0
,要么ls=None
。 http://matplotlib.sourceforge.net/api/pyplot_api.html#matplotlib.pyplot.contourf我终于找到了这个长期存在的问题(目前在Matplotlib 2.0中)的正确解决方案,它不需要多次调用来轮廓或光栅化图形。
请注意,问题中所示的问题仅出现在保存的出版物质量图形格式(如PDF)中,而不出现在质量较低的光栅文件(如PNG)中。
我的解决方案受到了this答案的启发,与colorbar的一个类似问题有关。类似的解决方案也适用于等高线图,如下所示:
下面是修复前的轮廓示例
下面是上面修正后的同一个图
赫尔顿比克,你找到解决问题的办法了吗?我无意中发现了这个问题,有段时间我也有同样的问题。我试过振亚的建议,但也不适合我。这个问题的解决方案虽然不是一个真正的解决方案,但更多的是一个解决方案,它很简单:只要重复相同的
contourf
命令,这将神奇地消除虚假的轮廓。如OP所述,当以太近的间隔进行等高线填充(
contourf
)时,会出现虚假等高线。我们可以通过设置大量的间隔来重现这种行为,例如:这给了我们输出:
细杂散轮廓明显影响轮廓填充的净颜色。
如果执行命令两次:
给我:
现在好多了。下面是最好的一个,有3个连续的
contourf
命令:我再也看不到任何细细的轮廓了!不幸的是,这可能会大大降低脚本的速度,这取决于数组大小和等高线间隔的数量。如果使用更多的等高线间隔,则伪等高线会更加突出。通常对我来说最有效的方法是使用50到100个等高线间隔,并执行两次
contourf
。注意,我使用的matplotlib版本不是最新的。此问题可能已在版本
1.1.0
中解决。如果有的话,请告诉我。相关问题 更多 >
编程相关推荐