2014-11-21 68 views
0

下午好,从数组的数据绘制这种图形

我在Matlab项目上工作,我已经在数组中存储了一些数据。我想绘制一个如下图所示的情节。但是,我不知道绘图功能我需要用和怎么样,为了获得图像绘图(它会不一样,只是这个样式)。

我的数据是一个11x16矩阵。

非常感谢你们!

enter image description here


@rayryeng

这是一个非常有用的答案,虽然我并不需要一个精确的形状。我需要我的数据会造成的形状,我一直在试图修改你为了写获得我所需要的代码,但我并没有得到它...

我的数据是

data = (10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 ; 
8.00 8.02 8.04 8.07 8.12 8.20 8.30 8.42 8.53 8.63 8.72 8.80 8.86 8.91 8.96 9.00; 
6.00 6.03 6.07 6.12 6.22 6.37 6.59 6.83 7.07 7.28 7.45 7.60 7.72 7.83 7.92 8.00; 
4.00 4.03 4.07 4.14 4.26 4.48 4.85 5.26 5.63 5.95 6.21 6.43 6.61 6.75 6.88 7.00; 
2.00 2.02 2.05 2.10 2.20 2.44 3.08 3.70 4.23 4.67 5.01 5.29 5.52 5.70 5.86 6.00; 
0 0 0 0 0 0 1.33 2.24 2.93 3.47 3.88 4.21 4.46 4.67 4.84 5.00; 
0 0 0 0 0 0 0 1.01 1.78 2.38 2.84 3.19 3.46 3.67 3.84 4.00; 
0 0 0 0 0 0 0 0 0.80 1.43 1.91 2.25 2.51 2.70 2.86 3.00; 
0 0 0 0 0 0 0 0 0 0.63 1.10 1.41 1.62 1.77 1.89 2.00; 
0 0 0 0 0 0 0 0 0 0 0.44 0.66 0.79 0.88 0.94 1.00; 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) 

这是我的数据矩阵(抱歉,我知道这是太长),以及当我尝试绘图书写:

[x,y] = meshgrid(1:16,1:11); 
contourf(x,y,data,20,'LineStyle','none'); 
colorbar 

它应该有比我得到不同的形状。 我需要知道0(零)的部分就像我之前展示的情节的白色部分。 (尽管不同的形状)我真的不知道该怎么做(我的数据应该被正确读取),如果你能帮助我,我会非常感激。

非常感谢你的最后回答。

+0

检查http://stackoverflow.com/questions/11765025/rescaling-axis-in-matplotlib-imshow-under-unique-function-call http://stackoverflow.com/questions/13015070/create -a-colorbar-from-rgba-function-in-matplotlib – 2014-11-21 17:00:21

+0

数据在哪里?你可以附上你的文章吗?尝试使用'imagesc'这将绘制您的数据和应用一个彩色地图...但我不能肯定地说,因为你没有你的数据在这里。 http://www.mathworks.com/help/matlab/ref/imagesc.html – rayryeng 2014-11-21 17:24:48

回答

2

这取决于你的数据,我相信你应该使用contourf

这是接近我能得到,

[x,y] = meshgrid(1:16,1:11); 
data = - y; 
data(end,5:10) = NaN; 
data(end-1,6:9) = NaN; 
data(end-2,7:8) = NaN; 
contourf(x,y,data,20,'LineStyle','none'); 
colorbar 

enter image description here

用,

data = - y .* abs(log(sin(.10 * x - 5.5)+.5)); 
data(data < -4) = NaN; 

enter image description here

,所以我想代码是正确的,它的物质你的数据,

data = max(data(:)) - data;

enter image description here

+0

非常感谢你! 我希望你能阅读我的下一个答案(因为它不会适合所有我要写的文本) – user3780731 2014-11-21 20:12:44

1

你有什么是正确的差不多。所有你需要做的是设置0到NaN的任何数据。这样,当你把它放入contourf时,那些部分就不会被显示。因此:

data = [10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 ; 
8.00 8.02 8.04 8.07 8.12 8.20 8.30 8.42 8.53 8.63 8.72 8.80 8.86 8.91 8.96 9.00; 
6.00 6.03 6.07 6.12 6.22 6.37 6.59 6.83 7.07 7.28 7.45 7.60 7.72 7.83 7.92 8.00; 
4.00 4.03 4.07 4.14 4.26 4.48 4.85 5.26 5.63 5.95 6.21 6.43 6.61 6.75 6.88 7.00; 
2.00 2.02 2.05 2.10 2.20 2.44 3.08 3.70 4.23 4.67 5.01 5.29 5.52 5.70 5.86 6.00; 
0 0 0 0 0 0 1.33 2.24 2.93 3.47 3.88 4.21 4.46 4.67 4.84 5.00; 
0 0 0 0 0 0 0 1.01 1.78 2.38 2.84 3.19 3.46 3.67 3.84 4.00; 
0 0 0 0 0 0 0 0 0.80 1.43 1.91 2.25 2.51 2.70 2.86 3.00; 
0 0 0 0 0 0 0 0 0 0.63 1.10 1.41 1.62 1.77 1.89 2.00; 
0 0 0 0 0 0 0 0 0 0 0.44 0.66 0.79 0.88 0.94 1.00; 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]; 
data(data == 0) = NaN; 

[x,y] = meshgrid(1:16,1:11); 
contourf(x,y,data,20,'LineStyle','none'); 
colorbar 

这就是我得到:

enter image description here

考虑您的意见,您希望y轴反转。只需在上面的代码末尾加上axis ij;即可翻转y轴,以便y-down是正向。如果你这样做,我们得到这个数字:

enter image description here


信贷应该去Kamtal,他想通了,你需要开始。我只是帮助完成了这项要求。

+0

非常感谢!我现在得到了我不习惯使用这个功能... 但是,我怎么能做到这一点反过来(我的意思是零在我的数组的下部,但在情节白色部分是在上方)有什么办法把它颠倒过来? 非常感谢! @rayryeng – user3780731 2014-11-21 20:42:08

+0

@ user3780731,使用'data = data(end:-1:1,:);'看看它是你想要的。你也可以使用'data = max(data(:)) - data'来改变颜色。 – Rashid 2014-11-21 20:51:49

+1

您可以通过执行axis ij来反转轴。让我修改我的帖子。 – rayryeng 2014-11-21 20:52:26