我有存儲在MATLAB格式的一些數據(兩個參數的函數),我想使用MATLAB來繪製。一旦我讀取數據,我使用mesh()
來繪製一張圖。我mesh()
情節給我的函數的值作爲顏色和表面高度,就像這樣:如何在matlab中製作「彩色地圖」圖?
我應該使用什麼MATLAB繪圖功能,以使那裏的因變量表示的2D網格圖作爲只有一種顏色?我正在尋找gnuplot中的pm3d map
之類的東西。
我有存儲在MATLAB格式的一些數據(兩個參數的函數),我想使用MATLAB來繪製。一旦我讀取數據,我使用mesh()
來繪製一張圖。我mesh()
情節給我的函數的值作爲顏色和表面高度,就像這樣:如何在matlab中製作「彩色地圖」圖?
我應該使用什麼MATLAB繪圖功能,以使那裏的因變量表示的2D網格圖作爲只有一種顏色?我正在尋找gnuplot中的pm3d map
之類的東西。
默認mesh
將顏色基於(默認)jet
顏色表(即熱更高)的表面值。您還可以使用surf
填充表面修補程序,並將'EdgeColor'
屬性設置爲'None'
(因此修補程序邊緣不可見)。
[X,Y] = meshgrid(-8:.5:8);
R = sqrt(X.^2 + Y.^2) + eps;
Z = sin(R)./R;
% surface in 3D
figure;
surf(Z,'EdgeColor','None');
2D地圖:您可以通過切換圖
% 2D map using view
figure;
surf(Z,'EdgeColor','None');
view(2);
的view
財產......或治療的價值得到了2D地圖在Z
作爲基質,將其視爲一個縮放圖像全光照克imagesc
和選擇適當的colormap。
% using imagesc to view just Z
figure;
imagesc(Z);
colormap jet;
地圖的彩色調色板,通過colormap(map)
,其中map
可以是定製的或任何的控制內置由MATLAB提供色彩映射表:
更新/改進地圖:地圖上的幾個設計選項(分辨率,平滑,軸等)可以由常規M ATLAB選項。作爲@Floris指出,這裏是一個平滑的,等軸,無軸標籤地圖,適用於這個例子:
figure;
surf(X, Y, Z,'EdgeColor', 'None', 'facecolor', 'interp');
view(2);
axis equal;
axis off;
非常好的答案(+1)。如果添加''facecolor'','interp'作爲額外的命名屬性,則可以更平滑地對顏色進行插值,而不是現在獲得的塊狀外觀。另外,如果描述X和Y尺寸的矢量是「 xv'和'yv',你可以通過'imagesc(xv,yv,Z)'來縮放座標軸。或者用'axis off'關閉x和y軸標籤。您將得到X和Y縮放比例與'軸圖像'相同 - 防止圖像被拉伸。最後,如果數據開始時不在常規網格中,則希望使用'griddata'函數進行重新採樣。 – Floris
@弗羅里斯以上所有的重點!將更新反映一些。儘管這些和類似選項中的許多(分辨率,粗略或精細,規則網格等)將取決於數據表示和映射的需要。 – gevang
謝謝 - 你說得對。但是,即使使用粗略數據,插值等操作也會有所幫助,並且讓軸線正確反映X和Y的比例是我心目中必不可少的。如果你沒有正確標記它們,不要標記它們('axis off')。你的回答非常好,我想幫助它變得更好。 – Floris
gevang的答案是偉大的。還有另外一種方式也可以直接使用pcolor
做到這一點。代碼:
[X,Y] = meshgrid(-8:.5:8);
R = sqrt(X.^2 + Y.^2) + eps;
Z = sin(R)./R;
figure;
subplot(1,3,1);
pcolor(X,Y,Z);
subplot(1,3,2);
pcolor(X,Y,Z); shading flat;
subplot(1,3,3);
pcolor(X,Y,Z); shading interp;
輸出:
此外,pcolor
是平的也一樣,顯示這裏(pcolor
是2D鹼;使用mesh
生成它上面的三維圖):
我也建議使用contourf(Z)
。對於我的問題,我想用二維可視化3D直方圖,但輪廓太光滑,無法表示直方圖條的頂視圖。
所以在我的情況下,我更喜歡使用jucestain的答案。 pcolor()
的默認shading faceted
更合適。 但是,pcolor()
不使用繪製矩陣的最後一行和一列。對於這一點,我用了padarray()
功能:
pcolor(padarray(Z,[1 1],0,'post'))
很抱歉,如果這是不是真的涉及到原來的職位
注意,這兩個令pColor和「衝浪+視圖(2)」不顯示最後一行和你的二維數據的最後一列。
另一方面,使用imagesc,你必須小心軸。 gevang的答案中的surf和imagesc示例(幾乎 - 除了最後一行和一列)相互對應,因爲2D sinc函數是對稱的。
爲了說明這2點,我公司生產的下面的下面的代碼所示:
[x, y] = meshgrid(1:10,1:5);
z = x.^3 + y.^3;
subplot(3,1,1)
imagesc(flipud(z)), axis equal tight, colorbar
set(gca, 'YTick', 1:5, 'YTickLabel', 5:-1:1);
title('imagesc')
subplot(3,1,2)
surf(x,y,z,'EdgeColor','None'), view(2), axis equal tight, colorbar
title('surf with view(2)')
subplot(3,1,3)
imagesc(flipud(z)), axis equal tight, colorbar
axis([0.5 9.5 1.5 5.5])
set(gca, 'YTick', 1:5, 'YTickLabel', 5:-1:1);
title('imagesc cropped')
colormap jet
正如你可以看到第10行和第5列中缺少衝浪情節。 (您也可以在其他答案中的圖像中看到此圖像。)
請注意如何使用「set(gca,'YTick'...」(和Xtick)命令正確設置x和y刻度標籤如果x和y不是1:1:N
另外請注意,如果您的z數據對應於xs和ys是(每個)均等間隔,那麼imagesc纔有意義。如果不是,您可以使用surf(並可能重複最後一列和一行以及一個「(end,end)」值 - 儘管這是一種骯髒的方法)。
gnuplot函數與Matlab的網格有什麼不同?使用Mesh,顏色與表面高度成正比 – Molly
我不想要一個表面,我只想要一個帶有顏色的2D地圖 – Dan