我正在尝试使用Matplotlib为我正在工作的论文绘制一些图表。我有两组数据,都是2D的numpy数组:一组ascii的山形阴影光栅图,我可以愉快地绘制并使用以下命令进行调整:
import matplotlib.pyplot as pp
import numpy as np
hillshade = np.genfromtxt('hs.asc', delimiter=' ', skip_header=6)[:,:-1]
pp.imshow(hillshade, vmin=0, vmax=255)
pp.gray()
pp.show()
给出的结果为:
还有第二张ASCII栅格图,用于描述穿过地形的河流特征。可以以与上面相同的方式绘制此数据,但是数组中不对应河网的值被分配为-9999的无数据值。目标是将无数据值设置为透明,以便河流值覆盖山体阴影图。
这是河流数据,这里表示为0的理想情况下每个像素都完全透明。
经过一些研究,我发现可以将我的数据转换为RGBA数组,并将α值设置为只使不需要的单元格透明。但是,河流数组中的值是浮点数,不能转换(因为原始值是该图的重点),如果使用RGBA格式,则我认为imshow
函数只能使用无符号整数。
是否有任何方法可以解决这个限制?我希望可以简单地创建一个带有像素值和α值的元组,并以这种方式绘制它们,但似乎不可能。
我也尝试使用PIL
创建具有无数据值透明的河流数据的PNG文件,但这似乎会自动将像素值缩放为0-255,从而丢失我需要保留的值。
我欢迎任何人对此问题的见解。
&
而不是and
,|
而不是or
,~
而不是not
等。例如:(a>5) & (b>5)
而不是a>5 and b>5
。您也无法以相同的方式链接运算符,例如,您需要(x>2) & (x<5)
而不是2>x>5
。 - Joe Kington