如何给图像上已知坐标的点添加图例

Imagesc图像中
已知某坐标,以及该坐标的值和对应的颜色
想在图像右上角做一个该点的图例,需要包括该点的颜色方块,颜色方块的右侧显示标签。
求问大shen们怎么做到,matlab或者python都可以

举例,获取第二行第三列点的图例:

img


x = [5 8];
y = [3 6];
C = [0 2 4 6; 8 10 12 14; 16 18 20 22];
scHdl=imagesc(x,y,C);
lgdHdl=getImagescLgdHdl(scHdl,2,3);
legend(lgdHdl,'2-3')


% 工具函数
function lgdHdl=getImagescLgdHdl(scHdl,row,col)
ax=gca;ax.XLim=ax.XLim;ax.YLim=ax.YLim;hold on
CData=scHdl.CData;
minC=min(CData,[],[1,2]);
maxC=max(CData,[],[1,2]);
CMap=colormap;
R=interp1(linspace(minC,maxC,size(CMap,1)),CMap(:,1),CData(row,col));
G=interp1(linspace(minC,maxC,size(CMap,1)),CMap(:,2),CData(row,col));
B=interp1(linspace(minC,maxC,size(CMap,1)),CMap(:,3),CData(row,col));
FaceColor=[R,G,B];
lgdHdl=fill(scHdl.XData(1)-2+[-1,-1,1,1],scHdl.XData(1)-2+[-1,1,1,-1],...
    FaceColor,'EdgeColor','none');
end

多个图例:

img

x = [5 8];
y = [3 6];
C = [0 2 4 6; 8 10 12 14; 16 18 20 22];
scHdl=imagesc(x,y,C);
lgdHdl1=getImagescLgdHdl(scHdl,2,3);
lgdHdl2=getImagescLgdHdl(scHdl,3,2);
legend([lgdHdl1,lgdHdl2],'2-3','3-2')


% 工具函数
function lgdHdl=getImagescLgdHdl(scHdl,row,col)
ax=gca;ax.XLim=ax.XLim;ax.YLim=ax.YLim;hold on
CData=scHdl.CData;
minC=min(CData,[],[1,2]);
maxC=max(CData,[],[1,2]);
CMap=colormap;
R=interp1(linspace(minC,maxC,size(CMap,1)),CMap(:,1),CData(row,col));
G=interp1(linspace(minC,maxC,size(CMap,1)),CMap(:,2),CData(row,col));
B=interp1(linspace(minC,maxC,size(CMap,1)),CMap(:,3),CData(row,col));
FaceColor=[R,G,B];
lgdHdl=fill(scHdl.XData(1)-2+[-1,-1,1,1],scHdl.XData(1)-2+[-1,1,1,-1],...
    FaceColor,'EdgeColor','none');
end

使用python的matplotlib库,通常是给一条线添加图例(即以一组数据为单位,而不能是一组数据中的一个)。如果想只给一个点的话,可以在绘制的时候,绘制“只有这一个点的散点图”,然后给其添加图例即可。

在右上方添加图例的代码如下,如有帮助还请采纳。

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 绘制一条折线
x = list(range(1,6))
y = [1, 3, 2, 5, 4]
plt.plot(x, y)

# 绘制点A(2,3), 颜色为红色,点大小为5
plt.scatter([2], [3], color='red', label='点A', lw=5)
# 绘制点B(4,5),颜色为绿色,点的大小为5
plt.scatter([4], [5], color='green', label='点B', lw=5)


# loc=1表示右上侧 loc=5表示右侧,尝试不同的数字表示不同的位置
plt.legend(loc=1)
plt.show()

代码效果如下:

img

matlab里用legend就可以

%Matlab中legend的位置设置 默认在右上方

clc
clear 
close all
Npoint = 100;
x = linspace(0,4*pi,Npoint);
y1 = sin(x);
y2 = cos(x);
H = plot(x,y1,x,y2);
legend('sin(x)','cos(x)');

img