gpt4 book ai didi

wolfram-mathematica - 创建图表的技巧

转载 作者:行者123 更新时间:2023-12-03 21:49:01 25 4
gpt4 key购买 nike

我想以编程方式创建这样的图表

(来源:yaroslavvb.com)

我想我应该将 GraphPlot 与 VertexCoordinateRules、VertexRenderingFunction 和 EdgeRenderingFunction 一起用于图形。我应该用什么来制作彩色斜面背景?

编辑
主要使用西蒙的想法,这是我最终使用的一个简化的“不太健壮”的版本

需要["GraphUtilities`"];
GraphPlotHighlight[edges_, verts_, color_] := Module[{},
vpos = Position[VertexList[edges], Alternatives @@verts];
coords = Extract[GraphCoordinates[edges], vpos];
(* 添加 .002 因为当段几乎共线时端盖消失 *)
AppendTo[coords, First[coords] + .002];
Show[Graphics[{color, CapForm["Round"], JoinForm["Round"],
厚度[.2],线[坐标],多边形[坐标]}],
GraphPlot[edges], ImageSize -> 150]
]

SetOptions[GraphPlot,
VertexRenderingFunction -> ({White, EdgeForm[Black], Disk[#, .15],
黑色,文本 [#2, #1]} &),
EdgeRenderingFunction -> ({Black, Line[#]} &)];
边 = GraphData[{"Grid", {3, 3}}, "EdgeRules"];
颜色 = {浅蓝色、浅绿色、浅红色、浅洋红色};
vsset = {{8, 5, 2}, {7, 5, 8}, {9, 6, 3}, {8, 1, 2}};
MapThread[GraphPlotHighlight[edges, #1, #2] &, {vsets, colors}]


(来源:yaroslavvb.com)

最佳答案

概括一下 Samsdram 的回答,我明白了

GraphPlotHighlight[edges:{((_->_)|{_->_,_})..},hl:{___}:{},opts:OptionsPattern[]]:=Module[{verts,coords,g,sub},
verts=Flatten[edges/.Rule->List]//.{a___,b_,c___,b_,d___}:>{a,b,c,d};
g=GraphPlot[edges,FilterRules[{opts}, Options[GraphPlot]]];
coords=VertexCoordinateRules/.Cases[g,HoldPattern[VertexCoordinateRules->_],2];
sub=Flatten[Position[verts,_?(MemberQ[hl,#]&)]];
coords=coords[[sub]];
Show[Graphics[{OptionValue[HighlightColor],CapForm["Round"],JoinForm["Round"],Thickness[OptionValue[HighlightThickness]],Line[AppendTo[coords,First[coords]]],Polygon[coords]}],g]
]
Protect[HighlightColor,HighlightThickness];
Options[GraphPlotHighlight]=Join[Options[GraphPlot],{HighlightColor->LightBlue,HighlightThickness->.15}];

上面的一些代码可以做得更健壮一点,但它有效:
GraphPlotHighlight[{b->c,a->b,c->a,e->c},{b,c,e},VertexLabeling->True,HighlightColor->LightRed,HighlightThickness->.1,VertexRenderingFunction -> ({White, EdgeForm[Black], Disk[#, .06], 
Black, Text[#2, #1]} &)]

Mathematica graphics

编辑#1:
可以在 http://gist.github.com/663438 找到此代码的清理版本。

编辑#2:
正如下面评论中所讨论的,我的 edges 的模式must match 是带有可选标签的边规则列表。这比 GraphPlot 使用的略少通用。函数(以及上面 gist 中的版本),其中边缘规则也允许包含在 Tooltip 中。 .

查找 GraphPlot 使用的确切模式我反复使用 Unprotect[fn];ClearAttributes[fn,ReadProtected];Information[fn]哪里 fn是感兴趣的对象,直到我发现它使用了以下(清理过的)函数:
Network`GraphPlot`RuleListGraphQ[x_] := 
ListQ[x] && Length[x] > 0 &&
And@@Map[Head[#1] === Rule
|| (ListQ[#1] && Length[#1] == 2 && Head[#1[[1]]] === Rule)
|| (Head[#1] === Tooltip && Length[#1] == 2 && Head[#1[[1]]] === Rule)&,
x, {1}]

我认为我的 edges:{((_ -> _) | (List|Tooltip)[_ -> _, _])..}模式是等效的,更简洁......

关于wolfram-mathematica - 创建图表的技巧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4091728/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com