- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有以下代表图形的 Matlab 图。我想将较暗的显示在较浅的边缘之上,这样较浅的边缘在穿过它们时不会修改较暗的边缘。我怎么办?
编辑:重现示例的Matlab代码如下
plot(G, 'XData', Xcoords, 'YData', Ycoords,'NodeLabel',{}, 'MarkerSize', 7,...
'Linewidth',1.6, 'EdgeCData', G.Edges.Weight)
colormap(flipud(gray(40)));
colorbar('southoutside');
caxis([min(G.Edges.Weight) max(G.Edges.Weight)])
axis off
边的权重在 G.Edges.Weight 中编码
要重现效果(使用较小的图形),您可以尝试使用以下代码:
A= zeros(4,4);
A(1,[2 3 4])=1;
A(2,4)=0.04;
A(2,[1 3])=1;
A(3,[2 1 4])=1;
A(4,2)=0.04;
A(4,[3 1])=1;
Xcoords=[1 2 2 1]';
Ycoords= [1 1 2 2 ]';
G= graph(A);% base toolbox
figure()
plot(G, 'XData', Xcoords, 'YData', Ycoords, 'NodeLabel',{}, 'MarkerSize', 7,...
'LineWidth', 3.8, 'EdgeCdata', G.Edges.Weight)
colormap(flipud(gray(40)));
colorbar('southoutside'); caxis([0 1]);
axis off
似乎是边的顺序决定了谁在上面。例如,如果将权重 0.04 分配给另一条交叉边 (A(1,3)=A(3,1)),则效果不可见,因为边 A(2,4)=A(4,2)来了。
最佳答案
MATLAB 的 graph
类中边表的顺序似乎非常依赖于图的邻接矩阵中的位置,这本质上不可能以保证某种任意边顺序的方式进行设计。所以我认为你只有两个选择:
第二个选项是可行的,注意绘制的 GraphPlot
对象在其 NodeChildren
中有一个 LineStrip
对象,它负责绘制所有相关的边缘。因为您使用的是灰度颜色贴图,所以您只需要此对象中的 RGB 数据即可确定其顶点需要如何排序以获得正确的绘图顺序。
首先,将绘制的结果存储在P
中,并将EdgeAlpha
设置为1
,这样图形就绘制好了
in such a way the lighter edges don't modify the darker when crossing them
P = plot(G, 'XData', Xcoords, 'YData', Ycoords, 'NodeLabel',{}, 'MarkerSize', 7,...
'LineWidth', 3.8, 'EdgeCdata', G.Edges.Weight, 'EdgeAlpha',1);
colormap(flipud(gray(40)));
colorbar('southoutside'); caxis([0 1]);
axis off
然后找到绘图过程中创建的LineStrip
:
drawnow
s = P.NodeChildren(arrayfun(@(o) isa(o,'matlab.graphics.primitive.world.LineStrip'), P.NodeChildren));
然后可以根据其 ColorData
确定 s
中顶点的新顺序,然后必须将其应用于 ColorData
和VertexData
属性来重新排序边缘而不改变任何其他内容:
[~,idx] = sortrows(s.ColorData','desc');
set(s, 'VertexData',s.VertexData(:,idx), 'ColorData',s.ColorData(:,idx));
这可能会被发生的任何进一步重绘所覆盖,并且作为未记录的功能无法保证其行为方式 - 但从表面上看它似乎可以满足您的需求。
关于matlab - 如何在 Matlab 绘图中显示较浅边缘的深色边缘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55010337/
我是一名优秀的程序员,十分优秀!