2017-08-07 184 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

相关问题