如何在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