我必须绘制在某些区域重叠的 5 条线,并且我需要能够看到所有的线。
我可以考虑稍微移动一下线条以显示它们,但这似乎不是一个非常优雅的解决方案。即便如此,我怎么能编码这样的东西?
有没有其他方法可以绘制多条重叠线,同时能够在每个点上区分它们?
例如,这是一个有 3 条重叠线的示例:
先感谢您!
我必须绘制在某些区域重叠的 5 条线,并且我需要能够看到所有的线。
我可以考虑稍微移动一下线条以显示它们,但这似乎不是一个非常优雅的解决方案。即便如此,我怎么能编码这样的东西?
有没有其他方法可以绘制多条重叠线,同时能够在每个点上区分它们?
例如,这是一个有 3 条重叠线的示例:
先感谢您!
另一种方法是使用透明度。
不幸的是,线对象不服从
透明度命令:(
一种解决方法是:
1. 下载patchline
(<-- 链接到 Matlab Central)
2. 使用它来绘制具有透明度的补丁线
拥有patchline
后,您可以尝试以下操作:
% create some lines:
l1 = [1, 1, 1, 0, 0, 0.25, 1, 1, 0, 0, 0, 0, 1 1];
l2 = [0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1];
l3 = [1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0];
% plot with patchline (notice the use of 'EdgeAlpha'):
figure;
patchline(1:length(l1), l1, [], 'EdgeColor', [0.8, 0.2, 0.35],...
'LineWidth', 5, 'EdgeAlpha', 0.5 );
hold on;
patchline(1:length(l1), l2, 'EdgeColor', [0.2, 0.7, 0.55],...
'LineWidth', 5, 'EdgeAlpha', 0.5 );
patchline(1:length(l1), l3, 'EdgeColor', [0.1, 0.2, 0.95],...
'LineWidth', 5, 'EdgeAlpha', 0.5);
% change y limits to see line overlap clearly
set(gca, 'YLim', [-0.5, 1.5]);
不是一个理想的方法 - 粗糙的“裂缝”将保持这种方式,
但您可以尝试不同的线宽或将
y 轴上的线移动一个与图像相对应的值,每条
线仅覆盖它的一半最近的邻居...
您可以使用 plot3 并将不同的 Z 值分配给不同的重叠线。但是,如果您交换 Y 轴和 Z 轴,它看起来更像您所期望的(Z 是“向上”方向):
例子:
Y1 = randn(1,100);
Y2 = randn(1,100);
X = 1:100;
Z1 = 1*ones(size(X));
Z2 = 2*ones(size(X));
plot3(X,Z1,Y1);
hold on;
plot3(X,Z2,Y2);
您可以使用EraseMode
情节线的属性。以下代码示例显示了如何移动线条和EraseMode
效果:
% First we generate some data
NLines = 2;
NPoints = 50;
LineWidth = 3;
ShiftStep = 1.1;
XData = linspace(0,1,NPoints);
YData = rand(NPoints,NLines);
for k=1:NLines
YData(:,k) = YData(:,k) > (k/(NLines+1));
end
% Then we create plot
figure('color','w');
subplot(3,1,1); plot(XData,YData, 'LineWidth',LineWidth);
ylim([-0.1 1.1]);
title('simple')
subplot(3,1,2); plot(XData,YData+repmat((0:NLines-1)*ShiftStep,NPoints,1), 'LineWidth',LineWidth, 'EraseMode','xor');
ylim([-0.1 1.1+ShiftStep*(NLines-1)]);
title('Shifted vertically')
subplot(3,1,3); plot(XData,YData, 'LineWidth',LineWidth, 'EraseMode','xor');
ylim([-0.1 1.1]);
title('EraseMode = xor')
在我看来,如果您有超过三行与您的情节相似的线条,则移动在视觉上更具吸引力。您也可以创建多个轴(就像我所做的那样)并将每条线绘制在自己的轴上,因此它们将相应地设置 y 标签,但它们的 X 标签将基本相同。