2017-08-07 228 views
5

如何在Matlab中創建顏色漸變,以便繪製y = y(x)的二維線圖,並使用另一個也取決於x的變量對其進行着色,使z = z(x)。散點圖或點圖對我來說也很好。如何在Matlab中使用第三個變量創建顏色漸變?

我也想有一個顏色圖例圖例,顯示顏色漸變,它是z的實際表示。這些東西在VisIt和ParaView等可視化工具中非常常見,但我還無法在Matlab中將其圖示出來。

回答

2

要連續操作線條的顏色,您需要使用surface

初看,這個函數看起來對繪製3d表面非常有用,它爲線條着色提供了比基本的plot函數更多的靈活性。我們可以使用網格的邊緣來繪製我們的線條,並利用頂點顏色C來沿着邊緣呈現內插顏色。

您可以檢查出的full list of rendering properties,但你是那些最有可能想都

  1. 「FaceColor」,「無」,不畫臉
  2. 「EdgeColor」,「口譯」 ,頂點

這裏之間進行內插是適於從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

Image produced by example

3

我知道要做到這一點的唯一方法是使用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 

和劇情:

enter image description here

+0

這似乎不工作,它給我一個錯誤。以供參考;在我的問題中,x,y和z的大小是相同的(我基本上想要將溫度與距離進行比較,並將它與例如特定的熱量相匹配,並且它們都是1000,1倍)。 – thephysicsguy

+0

@thephysicsguy:我更新了我的答案。問題在於我正在使用數據的行向量,但您似乎有數據的列向量。我推廣了代碼來處理。 – gnovice

0
  • 生成顏色表,例如jet(10)。這個例子會生成一個10 * 3的矩陣。
  • 使用interp1可以使用您的數據在RGB空間中的值之間進行插值,方法是將第一個顏色設置爲最低值,將最後一個顏色設置爲最高值。這將生成一個n * 3矩陣,其中n是數據點的數量。
  • 使用scatter和可選參數c來繪製插值顏色的點。
  • 激活colorbar顯示顏色條。
+0

你不需要'jet'和'interp1',你可以直接使用'z'。在這裏看到我的答案。 – EBH

3

如果散點圖是好的,你可以使用4th input to scatter

x = -10:0.01:10; 
y = sinc(x); 
z = sin(x); 
scatter(x,y,[],z,'fill') 

其中z是顏色。

enter image description here

+0

這實際上工作得很好!我可能不會選擇最佳答案,因爲他們有多種方法可以解決這個問題,我想知道他們,但是提出了高舉。恥於Matlab沒有一個很酷的功能,因爲它看到他們收取了多少錢。 – thephysicsguy

+0

那麼,在散點圖的情況下,他們有一個功能。至於一條線,我認爲不太清楚如何「劃分」着色線。想一想 - x的真實位置是無限小的,那麼該線的哪一部分應該爲特定的x着色?這樣或那樣,他們仍然收取太多;) – EBH