如何在Matlab中創建顏色漸變,以便繪製y = y(x)的二維線圖,並使用另一個也取決於x的變量對其進行着色,使z = z(x)。散點圖或點圖對我來說也很好。如何在Matlab中使用第三個變量創建顏色漸變?
我也想有一個顏色圖例圖例,顯示顏色漸變,它是z的實際表示。這些東西在VisIt和ParaView等可視化工具中非常常見,但我還無法在Matlab中將其圖示出來。
如何在Matlab中創建顏色漸變,以便繪製y = y(x)的二維線圖,並使用另一個也取決於x的變量對其進行着色,使z = z(x)。散點圖或點圖對我來說也很好。如何在Matlab中使用第三個變量創建顏色漸變?
我也想有一個顏色圖例圖例,顯示顏色漸變,它是z的實際表示。這些東西在VisIt和ParaView等可視化工具中非常常見,但我還無法在Matlab中將其圖示出來。
要連續操作線條的顏色,您需要使用surface
。
初看,這個函數看起來對繪製3d表面非常有用,它爲線條着色提供了比基本的plot
函數更多的靈活性。我們可以使用網格的邊緣來繪製我們的線條,並利用頂點顏色C
來沿着邊緣呈現內插顏色。
您可以檢查出的full list of rendering properties,但你是那些最有可能想都
這裏之間進行內插是適於從MATLAB Answers post
x = 0:.05:2*pi;
y = sin(x);
z = zeros(size(x)); % We don't need a z-coordinate since we are plotting a 2d function
C = cos(x); % This is the color, vary with x in this case.
surface([x;x],[y;y],[z;z],[C;C],...
'FaceColor','none',...
'EdgeColor','interp');
一個例子210
我知道要做到這一點的唯一方法是使用surf
一個小竅門:
% Create some sample data:
x = cumsum(rand(1,20)); % X data
y = cumsum(rand(1,20)); % Y data
z = 1:20; % "Color" data
% Plot data:
surf([x(:) x(:)], [y(:) y(:)], [z(:) z(:)], ... % Reshape and replicate data
'FaceColor', 'none', ... % Don't bother filling faces with color
'EdgeColor', 'interp', ... % Use interpolated color for edges
'LineWidth', 2); % Make a thicker line
view(2); % Default 2-D view
colorbar; % Add a colorbar
和劇情:
jet(10)
。這個例子會生成一個10 * 3的矩陣。interp1
可以使用您的數據在RGB空間中的值之間進行插值,方法是將第一個顏色設置爲最低值,將最後一個顏色設置爲最高值。這將生成一個n * 3矩陣,其中n是數據點的數量。scatter
和可選參數c
來繪製插值顏色的點。colorbar
顯示顏色條。你不需要'jet'和'interp1',你可以直接使用'z'。在這裏看到我的答案。 – EBH
如果散點圖是好的,你可以使用4th input to scatter
:
x = -10:0.01:10;
y = sinc(x);
z = sin(x);
scatter(x,y,[],z,'fill')
其中z
是顏色。
這實際上工作得很好!我可能不會選擇最佳答案,因爲他們有多種方法可以解決這個問題,我想知道他們,但是提出了高舉。恥於Matlab沒有一個很酷的功能,因爲它看到他們收取了多少錢。 – thephysicsguy
那麼,在散點圖的情況下,他們有一個功能。至於一條線,我認爲不太清楚如何「劃分」着色線。想一想 - x的真實位置是無限小的,那麼該線的哪一部分應該爲特定的x着色?這樣或那樣,他們仍然收取太多;) – EBH
這似乎不工作,它給我一個錯誤。以供參考;在我的問題中,x,y和z的大小是相同的(我基本上想要將溫度與距離進行比較,並將它與例如特定的熱量相匹配,並且它們都是1000,1倍)。 – thephysicsguy
@thephysicsguy:我更新了我的答案。問題在於我正在使用數據的行向量,但您似乎有數據的列向量。我推廣了代碼來處理。 – gnovice