【问题标题】:Why doesn't the contourf function in Matlab use the highest value of the plotted data?为什么 Matlab 中的 contourf 函数不使用绘制数据的最大值?
【发布时间】:2014-12-16 08:36:49
【问题描述】:

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

有什么想法吗?

提前致谢!

【问题讨论】:

  • 如果您取消注释 caxis 行,您不会得到您想要的吗?
  • 不,你可以cpr前面的代码取消注释caxis和下面的代码。

标签: matlab limits contourf


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-10
      • 1970-01-01
      • 1970-01-01
      • 2013-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多