2014-11-21 37 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