다음은베이스 맵을 사용하여 Geogtiff 파일의 데이터를 플롯하는 스크립트입니다. 데이터는 범주 적이며이 도메인에는 13 개의 범주가 있습니다. 문제는 일부 범주가 하나의 색으로 묶여 있으므로 일부 해상도가 손실된다는 것입니다.
불행히도이 문제를 해결하는 방법을 모르겠습니다. 나는 plt.cm.get_cmp
이 이산 데이터 세트를 위해 더 낫다는 것을 읽었지만 불행히도 그것을 얻지는 못했다. 여기에 어떤 도움을 너무 많이컬러 맵이 데이터를 올바르게 분류하지 않습니다.
np.unique(data_new)
array([ 0, 1, 4, 5, 7, 10, 11, 12, 13, 14, 15, 16, 17], dtype=uint8)
감사 : 여기
gtif = 'some_dir'
ds = gdal.Open(gtif)
data = ds.ReadAsArray()
gt = ds.GetGeoTransform()
proj = ds.GetProjection()
xres = gt[1]
yres = gt[5]
xmin = gt[0] + xres
xmax = gt[0] + (xres * ds.RasterXSize) - xres
ymin = gt[3] + (yres * ds.RasterYSize) + yres
ymax = gt[3] - yres
xy_source = np.mgrid[xmin:xmax+xres:xres, ymax+yres:ymin:yres]
ds = None
fig2 = plt.figure(figsize=[12, 11])
ax2 = fig2.add_subplot(111)
ax2.set_title("Land use plot")
bm2 = Basemap(ax=ax2,projection='cyl',llcrnrlat=ymin,urcrnrlat=ymax,llcrnrlon=xmin,urcrnrlon=xmax,resolution='l')
bm2.drawcoastlines(linewidth=0.2)
bm2.drawcountries(linewidth=0.2)
data_new=np.copy(data)
data_new[data_new==255] = 0
nbins = np.unique(data_new).size
cb =plt.cm.get_cmap('jet', nbins+1)
img2 =bm2.imshow(np.flipud(data_new), cmap=cb)
ax2.set_xlim(3, 6)
ax2.set_ylim(50,53)
plt.show()
labels = [str(i) for i in np.unique(data_new)]
cb2=bm2.colorbar(img2, "right", size="5%", pad='3%', label='NOAH Land Use Category')
cb2.set_ticklabels(labels)
cb2.set_ticks(np.unique(data_new))
는 도메인 (번호 클래스) 내에서 발견되는 종류이다.
덕분에 빠른 답변에 대한 너무 많은! 이것은 작동하지만 유일한 문제는 중첩 된 for 루프가 내가 가지고있는 매우 큰 데이터 세트 (수천 개의 점)에 대해 실제로 느려질 것이라는 것입니다. 매우 큰 데이터 세트에 대해이를 최적화하는 방법이 있습니까? – user2013373
루프를 사용하지 않고보다 효율적인 버전에 대한 대답을 편집했습니다. – ImportanceOfBeingErnest
감사! 루프를 피하기 위해 노력했던 것과 다소 비슷합니다. 멋진 한 주를 보내십시오! – user2013373