0

有人知道为什么函数 countourf 不使用绘图区域中任何地方的最大值对应的颜色吗?

如果您尝试下面的代码,然后命令 get(h_colorbar,'YLim') Matlab 返回一个上限,该上限不是矩阵的最高元素 (500),而是一个较小的数字 (475.9091)。

从代码中的注释行可以看出,我能够更改颜色条的上限/下限,但这当然不能解决问题。我希望 Matlab 实际使用我的数据矩阵中的最高值;例如,我希望看到对应于 (200,300) 的点以最深的红色着色。

Xdata=[7 11 15 19 23 27 31 39 50 75 100 200];
Ydata=[50 100 140 150 200 300];
dataZ=[...
    500 500 438 310 269 253 245 238 235 237 241 500 ...
    500 414 291 259 248 244 241 239 239 250 274 500 ...
    500 335 268 251 246 243 241 240 242 261 308 500 ...
    500 323 264 250 245 243 241 241 243 265 319 500 ...
    500 289 256 248 244 243 242 243 248 287 500 500 ...
    360 264 250 245 244 243 244 247 261 376 500 500 ...
    ]';    

% % % In matrix form
mdataZ=vec2mat(dataZ,length(Xdata));

[mXdata,mYdata]=meshgrid(Xdata,Ydata);

figure_5=figure;
set(gca,'FontName','Times New Roman', 'FontSize',16,'YColor','k')
hold on
box on
% % % set(gca,'CLim',[min(dataZ) max(dataZ)])
contourf(mXdata,mYdata,mdataZ,10)
scatter(19,140,50,'k')
h_colorbar=colorbar;
set(get(h_colorbar,'ylabel'),'string','Z','FontName','Times New Roman', 'FontSize',18)
set(h_colorbar,'FontName','Times New Roman','FontSize',16)
% % % set(h_colorbar,'YLim',[200 500],'YTick',[0:50:500])
% % % caxis([200 500])
axis([min(min(mXdata)),max(max(mXdata)),min(min(mYdata)),max(max(mYdata))])
xlabel('X','FontName','Times New Roman', 'FontSize',18)
ylabel('Y','FontName','Times New Roman', 'FontSize',18)

任何想法?

提前致谢!

4

2 回答 2

0

contourf 将您的数据分成 n 个(对于您的情况为 10 个)级别。除非您指定级别,否则它们会由函数自动选择。

最高级别必须低于数据中的最高点。也许它可能是相同的,我不确定在这种情况下matlab如何处理等于轮廓的值。但是,如果您将其保留为自动轮廓级别,它肯定会更低。

该函数不绘制单个数据点,仅绘制轮廓高度。因此,值 500 不在颜色图中,最大值是最高轮廓的高度。

为了解决这个问题,您可以放置​​一个轮廓值向量而不是 n。将最高值设置为接近或等于 500。

于 2014-12-16T11:59:30.630 回答
0

按照您的建议,我替换了调用 countourf 函数的行。而不是元素的数量(10),我把linspace(min(dataZ),max(dataZ),10). 有趣的是,contourf 使用的最小值似乎总是输入矩阵的最低元素。

如果你很好奇,可以比较前面的代码和下面的代码:

new_figure=figure;
set(gca,'FontName','Times New Roman', 'FontSize',16,'YColor','k')
hold on
box on
contourf(mXdata,mYdata,mdataZ,linspace(min(dataZ),max(dataZ),10))
scatter(19,140,50,'k')
h_colorbar=colorbar;
set(get(h_colorbar,'ylabel'),'string','Z','FontName','Times New Roman', 'FontSize',18)
set(h_colorbar,'FontName','Times New Roman','FontSize',16)
axis([min(min(mXdata)),max(max(mXdata)),min(min(mYdata)),max(max(mYdata))])
xlabel('X','FontName','Times New Roman', 'FontSize',18)
ylabel('Y','FontName','Times New Roman', 'FontSize',18)
于 2014-12-16T21:45:13.567 回答