Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么';Matlab中的contourf函数是否使用绘制数据的最高值?_Matlab_Limits_Contourf - Fatal编程技术网

为什么';Matlab中的contourf函数是否使用绘制数据的最高值?

为什么';Matlab中的contourf函数是否使用绘制数据的最高值?,matlab,limits,contourf,Matlab,Limits,Contourf,有人知道为什么函数countourf不使用与绘图区域中任何位置的最大值对应的颜色吗 如果您尝试下面的代码,然后 get(h_彩色条,'YLim') Matlab返回的上限不是矩阵的最高元素(500),而是较小的数字(475.9091) 从代码中的注释行可以看出,我可以更改颜色栏的上限/下限,但这当然不能解决问题。 我希望Matlab实际使用数据矩阵中的最高值;例如,我希望看到(200300)对应的点用最深的红色表示 Xdata=[7 11 15 19 23 27 31 39 50 75 100

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

如果您尝试下面的代码,然后
get(h_彩色条,'YLim')
Matlab返回的上限不是矩阵的最高元素(500),而是较小的数字(475.9091)

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

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)
有什么想法吗


提前谢谢

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

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

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


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

根据您的建议,我替换了调用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)

如果您取消对
caxis
行的注释,难道您没有得到您想要的吗?不,您可以cpr前面的代码取消注释caxis和下面的代码。