sgr*_*eve 26 python matplotlib python-imaging-library
我正在尝试使用matplotlib为我正在处理的论文绘制一些数字.我在2D numpy数组中有两组数据:ascii hillshade raster,我可以愉快地绘制和调整使用:
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()
Run Code Online (Sandbox Code Playgroud)
这使:

第二个ascii栅格描绘了流经景观的河流的属性.该数据可以以与上述相同的方式绘制,但是阵列中不对应于河网的值被指定为-9999的无数据值.目的是将无数据值设置为透明,以便河流值覆盖山体阴影.
这是河流数据,理想情况下,此处表示为0的每个像素都是完全透明的.

对此进行了一些研究后,我似乎可以将我的数据转换为RGBA数组,并将alpha值设置为仅使不需要的单元格透明.但是,河流数组中的值是浮点数并且无法转换(因为原始值是图的整个点),我相信imshow如果使用RGBA格式,该函数只能采用无符号整数.
这种限制有什么办法吗?我希望我可以简单地创建一个具有像素值和alpha值的元组并将其绘制成这样,但这似乎不可能.
我还PIL尝试使用无数据值透明创建河流数据的PNG文件,但这似乎会自动将像素值缩放到0-255,从而丢失了我需要保留的值.
我欢迎任何人对这个问题有任何见解.
Joe*_*ton 41
只是掩盖你的"河流"阵列.
例如
rivers = np.ma.masked_where(rivers == 0, rivers)
Run Code Online (Sandbox Code Playgroud)
作为以这种方式覆盖两个图的快速示例:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm
# Generate some data...
gray_data = np.arange(10000).reshape(100, 100)
masked_data = np.random.random((100,100))
masked_data = np.ma.masked_where(masked_data < 0.9, masked_data)
# Overlay the two images
fig, ax = plt.subplots()
ax.imshow(gray_data, cmap=cm.gray)
ax.imshow(masked_data, cmap=cm.jet, interpolation='none')
plt.show()
Run Code Online (Sandbox Code Playgroud)

此外,在旁注中,imshow将很乐意接受其RGBA格式的浮动.它只是希望一切都在0到1之间.
tac*_*ell 14
使用蒙版数组执行此操作的另一种方法是设置颜色贴图如何处理剪切值低于最小值clim(无耻地使用Joe Kington的示例):
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm
# Generate some data...
gray_data = np.arange(10000).reshape(100, 100)
masked_data = np.random.random((100,100))
my_cmap = cm.jet
my_cmap.set_under('k', alpha=0)
# Overlay the two images
fig, ax = plt.subplots()
ax.imshow(gray_data, cmap=cm.gray)
im = ax.imshow(masked_data, cmap=my_cmap,
interpolation='none',
clim=[0.9, 1])
plt.show()
Run Code Online (Sandbox Code Playgroud)

还有一个set_over用于剪切顶部和一个set_bad用于设置颜色映射处理数据中"坏"值的方式.
做这种方式的优点是,你可以通过只调整改变你的门槛clim与im.set_clim([bot, top])
| 归档时间: |
|
| 查看次数: |
14584 次 |
| 最近记录: |