Stop contourf from interpolating between my grid

17 ビュー (過去 30 日間)
even coil
even coil 2015 年 6 月 11 日
回答済み: even coil 2015 年 6 月 15 日
I am using a contourf plot of the form: contourf(B0, B1, Z)
The spacing of B0 and B1 is .05.
The function values in Z only take on a few discrete values.
The resulting behavior is that if say Z(b0,b1) = 1 and Z(b0+1,b1) = 2, then MATLAB draws many contours between the two points, thereby creating many lines between the two points.
Is there a way to prevent this behavior?
My initial thought was to try to specify the number of contours directly. However, when this is done MATLAB just fills the region between the two points with one of the other colors being used, which is also not appropriate.
  1 件のコメント
Walter Roberson
Walter Roberson 2015 年 6 月 12 日
What is the form of Z? Is it a scalar, a vector of sorted values, an array?

サインインしてコメントする。

採用された回答

even coil
even coil 2015 年 6 月 15 日
Turns out the pcolor command works for what I want.
colormap(gray(length(unique(Z))));
h = pcolor(B0,B1,Z);
caxis([-.5 1]);
xlim([-.2 1.6]);
ylim([-1 1]);
set(h, 'EdgeColor', 'none');

その他の回答 (2 件)

Walter Roberson
Walter Roberson 2015 年 6 月 12 日
If your Z is an array then you are using the contourf(X,Y,Z) form, and you instead want to use the contourf(X,Y,Z,v) form. As there are only a few discrete values, then
contourf(B0,B1,Z,unique(Z(:));

even coil
even coil 2015 年 6 月 12 日
Sorry, I should have included a MWE. The code is below. I attach the necessary data files for my example. Also, the plots are below.
clear;
close all;
B0 = load('B0.txt');
B1 = load('B1.txt');
fontsize = 20;
colormap(gray);
Z = load('Z.txt');
Z = round(Z*1000)/1000;
Z(abs(Z) == Inf) = 1;
% This creates many lines
contourf(B0, B1, Z);
caxis([-.5 1]);
xlim([-.2 1.6]);
ylim([-1 1]);
print('-dpng', 'Version1.png');
% Still wrong---there should be no light grey outline on the dark grey area
% (Look at Z---it goes immediately from the smallest value -.1420 to the largest
% value of 1, without going through the intermediate value 0. MATLAB is
% interpolating here.)
close;
colormap(gray);
contourf(B0, B1, Z, unique(Z));
caxis([-.5 1]);
xlim([-.2 1.6]);
ylim([-1 1]);
print('-dpng', 'Version2.png');

カテゴリ

Help Center および File ExchangeContour Plots についてさらに検索

タグ

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by