问题描述
我正在根据该点的变量将地球上的点(经纬度坐标)分类。 我有一个数组(360 x 720)(地球的纬度,经度网格的分辨率),其中包含每个点的适当分类作为数字, 有13个类别; a,b,c,... 在我的 360x 720 数组中,这些类别表示为 1、2、3、...、13。
我可以通过 cartopy 和 matplotlib 映射它,但是我一直在尝试制作一个图例/键来显示每种颜色映射的类别,我能得到的最好的是一个无用的颜色条。
ax = plt.axes(projection=ccrs.PlateCarree()) #cartopy
preplot = plt.contourf(lons,lats,Map,17,transform=ccrs.PlateCarree(),cmap = "tab20")
ax.coastlines() # cartopy
cb = plt.colorbar(preplot,orientation="horizontal")
plt.title("1901")
plt.show()
给出: enter image description here 地图和颜色条
抱歉,如果这不是所有需要的信息
解决方法
如果我正确理解您的问题,您想将所有 13 个类别的标签添加到您的颜色栏吗?在这种情况下,您应该使用以下方法在颜色栏上设置总共 13 个刻度(因为您有 13 个类别):
const generate = async (base,upper,size,numbersWanted) => {
return new Promise((resolve,reject) => {
try {
console.log('Working...');
let myPool = [];
let counter = {};
// Generate the Pool and count each number generated
for (let x = 0; x < size; x++) {
let randomnum = getRandomNumber(base,upper);
myPool.push(randomnum);
if (counter.hasOwnProperty(randomnum)) counter[randomnum]++;
else counter[randomnum] = 1;
}
// Create an array of the occurred numbers and the amounts
let sortable = [];
for (let number in counter) {
sortable.push([String(number),counter[number]]);
}
// Sort the array by highest occurred numbers
sortable.sort(function(a,b) {
return b[1] - a[1];
});
// Slice of the not needed numbers that didnt occurr as much
let reduced = sortable.slice(0,numbersWanted);
let result = {
pool: myPool,counter: counter,wantedNumbers: reduced
};
resolve(result);
} catch (e) {
reject(e);
}
})
};
现在,您应该在颜色栏上看到总共 13 个刻度。但是,目前 cb.set_ticks([i for i in range(1,14,1)])
是数字 ticklabels
。要更改此设置,您可以使用 1-13
。因此,例如:
cb.set_ticklabels(<list_of_strings>)
在这种情况下,您的完整代码将是:
cb.set_ticklabels(['a','b','c','d','e','f','g','h','i','j','k','l','m'])