为什么Matlab中的contourf函数不使用绘制数据的最高值?

时间:2014-12-16 08:36:49

标签: matlab limits contourf

有人知道为什么函数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)

有什么想法吗?

提前致谢!

2 个答案:

答案 0 :(得分:0)

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

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

单个数据点不是由函数绘制的,只是轮廓高度。因此,值500不在色图中,max是最高轮廓的高度。

要解决此问题,您可以设置轮廓值的向量而不是n。将最高值接近或等于500。

答案 1 :(得分:0)

根据你的建议,我更换了调用countourf函数的行。 我放了linspace(min(dataZ),max(dataZ),10)而不是元素(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)