标签: graph-drawing

缩小graphviz生成的图形的大小(如区域)

有没有人有任何减少graphviz生成的图形大小的一般提示(区域大小,而不是文件大小).

我有一个相当大的图(700个节点).我为每个节点设置了较小的字体大小,但它似乎只减小了字体大小而不是实际的节点大小.是否有任何属性可以减少图表中的总空白量?谢谢!

configuration graphviz graph-drawing image-size

60
推荐指数
1
解决办法
2万
查看次数

点到右边到左边(Graphviz)

我正在尝试使用点显示从右到左(即向后)的边缘:

C <- A -> B
Run Code Online (Sandbox Code Playgroud)

我能做的最好的事情是:

digraph {
  a -> b;
  c -> a [dir="back"];
  {rank=same;c a b}
}
Run Code Online (Sandbox Code Playgroud)

..这很好,除了我不喜欢使用c -> a边缘指向另一个方向.

所以我想分享这个解决方案(似乎没有在SO上提及),并检查我是否遗漏了一些明显的东西.

请参阅:http://www.graphviz.org/doc/info/attrs.html#k : dirType

graphviz graph-drawing right-to-left

32
推荐指数
2
解决办法
2万
查看次数

如何增加networkx.spring_layout的节点间距

绘制一个集团图

import networkx as nx
....
nx.draw(G, layout=nx.spring_layout(G))
Run Code Online (Sandbox Code Playgroud)

产生如下图:

在此输入图像描述

显然,需要增加节点之间的间隔(例如,边缘长度).我用谷歌搜索了这个,并在这里找到了这个建议:

对于某些布局算法,存在可能有帮助的"缩放"参数.例如

1中:将networkx导入为nx

2:G = nx.path_graph(4)

在[3]中:pos = nx.spring_layout(G)#default to scale = 1

在[4]中:nx.draw(G,pos)

在[5]中:pos = nx.spring_layout(G,scale = 2)#所有节点之间的双倍距离

在[6]中:nx.draw(G,pos)

但是,该scale参数似乎没有任何影响.

获得更好绘图的正确方法是什么?

python graph graph-drawing networkx

28
推荐指数
3
解决办法
2万
查看次数

如何在PHP中绘制图形?

嘿,我想在我的网站上绘制基于PHP的图形(Stdent标记分布).我怎样才能做到这一点?

php graphics draw graph-drawing

20
推荐指数
6
解决办法
11万
查看次数

改进graphviz布局

在制作图形时,我有完美的瘫痪.如果没有充分探索视觉的对称性,我很难理解正在发生的事情.我也是一个非常直观的学习者,我喜欢简化我刚刚学到的东西并将它们写在纸上.

Graphviz是一个自动绘制东西的好工具,但它可能更好.让我们从一个好图(一个状态机)的例子开始.没关系质量(它可以用更好的工具重新绘制)这个几乎是完美的,除了我将逆时针旋转45度以使对称性明显.然后,它应该让读者花更少的时间来弄清楚状态q1和q2是如何相似以及它们在何处不同.我认为,只有一种最好的方式来表示该图表,因为它旁边没有其他图形.

http://gallery.hd.org/_exhibits/maths/math-finite-state-machine-DHD.gif http://gallery.hd.org/_exhibits/maths/math-finite-state-machine-DHD.gif

现在让我们来看一个不太完美的描述:

http://linux.softpedia.com/screenshots/Graphviz_1.png http://linux.softpedia.com/screenshots/Graphviz_1.png

这看起来像是graphviz会生成的东西.是的,边缘是光滑的,但GAAAAWWWD这是不必要的混乱!它看起来像一张思维导图,而不是一张准备好消费的完成图.我相信人眼CRAVE(不能少)对称.是的,等级制度等也是重要因素.

我很惊讶没有更好的算法可用.有些人根本不是视觉学习者; 他们可以通过阅读符号来掌握抽象概念.不是我!

那么,我的问题是什么?那么,是否有更好的免费软件可用于绘制中小型图形?也许

谢谢!

让我知道如何改进这篇文章.

PS我花了10分钟在dia中画出一个类似的克隆.它仍然不是很完美,但它很方便制作,因为一切都按网格(我错过了一些小细节,但不想重新上传).LR_0需要来自上方的"开始--->"以让用户更快地掌握起始状态.

Finate State Machine http://i47.tinypic.com/315e6w6.png

graphviz graph-drawing graph-layout

19
推荐指数
2
解决办法
2万
查看次数

绘制有向非循环图:最小化边缘交叉?

以树形式在DAG中布置顶点(即顶部没有内边的顶点,顶点仅依赖于下一层上的顶点等)是相当简单的,没有图形绘制算法,如Efficient Sugiyama.但是,是否有一个简单的算法可以最大限度地减少边缘交叉?(对于某些图形,可能无法完全消除边缘交叉.)图片说千言万语,所以有一种算法可以提示没有交叉边缘的东西.(与此相比).

编辑:结果

我已经接受了Senthil的建议graphviz/dot - 快速浏览文档确认它很容易用作库或外部工具,并且输出格式非常容易解析.但是,我最终选择使用GraphSharp,因为我已经在使用.NET等(虽然它绝对没有dot那么强大).结果是"足够好",并且通过一点边缘路由和调整可以做得更好(模糊文本是因为3.5 WPF).

自动布局图http://public.blu.livefilestore.com/y1pEY8I95GtlzcxZzhDMhhKoUyejT_sVVZ4jlsDK2fdl6XAR4WV4-yuSesY6chXokmAZxdJXZ4Bv674TqwpT1-fOg/dag3.gif

这是完整的 C#代码(这是引用QuickGraph或GraphSharp的所有代码 - 是的;就这么简单):

internal static class LayoutManager
{
    private const string ALGORITHM_NAME = "EfficientSugiyama";
    private const bool MINIMIZE_EDGE_LENGTH = true;
    private const double VERTEX_DISTANCE = 25;
    private const double LAYER_DISTANCE = 25;
    private const double MIN_CANVAS_OFFSET = 20;

    public static void doLayout(GraphCanvas canvas)
    {
        // TODO use a background thread
        // TODO add comments
        canvas.IsEnabled = false;
        canvas.Cursor …
Run Code Online (Sandbox Code Playgroud)

c# algorithm wpf graph graph-drawing

15
推荐指数
2
解决办法
8780
查看次数

创建图表的技巧

我想以编程方式创建这样的图表 http://yaroslavvb.com/upload/junction-tree-decomposition.png

我想我应该使用带有VertexCoordinateRules,VertexRenderingFunction和EdgeRenderingFunction的GraphPlot作为图形.我应该使用什么彩色斜面背景?

编辑 主要使用Simon的想法,这是我最终使用的简化的"不太健壮"的版本

Needs["GraphUtilities`"];
GraphPlotHighlight[edges_, verts_, color_] := Module[{},
  vpos = Position[VertexList[edges], Alternatives @@ verts];
  coords = Extract[GraphCoordinates[edges], vpos];
  (* add .002 because end-cap disappears when segments are almost colinear *)  
  AppendTo[coords, First[coords] + .002];
  Show[Graphics[{color, CapForm["Round"], JoinForm["Round"], 
     Thickness[.2], Line[coords], Polygon[coords]}],
   GraphPlot[edges], ImageSize -> 150]
  ]

SetOptions[GraphPlot, 
  VertexRenderingFunction -> ({White, EdgeForm[Black], Disk[#, .15], 
      Black, Text[#2, #1]} &), 
  EdgeRenderingFunction -> ({Black, Line[#]} &)];
edges = GraphData[{"Grid", {3, 3}}, "EdgeRules"];
colors = {LightBlue, LightGreen, LightRed, LightMagenta};
vsets = {{8, 5, …

wolfram-mathematica graph-drawing

14
推荐指数
2
解决办法
2227
查看次数

用于绘制流程图或定向图的免费C++库?

我想在我的程序中嵌入一个绘制画布的流程图.用户可以:

  • 绘制"节点"(矩形节点就足够了)和"边缘"(最好是正交)来连接"节点";
  • 使用鼠标拖动节点进行布局并调整矩形大小;
  • 用鼠标选择一个或多个节点进行删除,复制,粘贴等;
  • 通过鼠标选择一个或多个节点来编辑它们的预定义属性(体积,温度,压力等).
  • 改变颜色(可选)
  • 向/从文件保存/读取数据.

绘图后,程序只需要获取连接逻辑(在数据结构中像Directed图)和属性进行进一步计算.

是否有任何免费或开源的C++库来执行此操作?(不需要跨平台,在Windows中可用就足够了.)

c++ directed-graph graph-drawing

13
推荐指数
1
解决办法
9792
查看次数

如何获取和设置图像的属性

我正在尝试理解Bitmap或Image的这两种方法.一个存在.SetPropertyItem(),另一个存在.GetPropertyItem().

我完全混淆了文档说我要设置属性项的方式.

Microsoft文档中,它声明我们应该通过图像中已存在的属性项的id选择属性项,为该属性项提供新ID,设置属性,然后使用该检索到的属性设置image属性项项目.

这太奇怪了,但真正让我感到的是我们不能只将属性项的id设置为我们必须将属性项id设置为属性项id列表中已存在的id的任何ID.

令人困惑的是,我正在使用已经通过其他方式设置的属性并覆盖它的属性,然后使用属性id列表中的其他现有ID将其添加回图像.

我在这里错过了什么?有没有办法简单地创建一个新的PropertyItem,然后将具有任何给定ID的属性项添加到图像或位图?

这是我正在谈论的一个例子.20752的ID是图像已有的属性,当我设置PropertyItem的ID时,20753是Image所具有的ID.

这将成功设置属性项.

  private void Form1_Load(object sender, EventArgs e)
    {

        string path = Environment.CurrentDirectory + @"\sample.png";
        Image image = Image.FromFile(path);

        PropertyItem pi = image.GetPropertyItem(20752);

        pi.Id = 20753;

        pi.Type = 1;
        pi.Value = Encoding.UTF8.GetBytes("MyImageInfo");
        pi.Len = pi.Value.Length;
        image.SetPropertyItem(pi);

        image.Save(Environment.CurrentDirectory + @"\sample2.png");
    }
Run Code Online (Sandbox Code Playgroud)

这将成功检索PropertyItem.

  private void Form1_Load(object sender, EventArgs e)
        {

            string path = Environment.CurrentDirectory + @"\sample.png";
            Image image = Image.FromFile(path);

            PropertyItem propItem = image.GetPropertyItem(20753);
        }
Run Code Online (Sandbox Code Playgroud)

有一种方法,我可以用自己的ID创建一个新的PropertyItem,而不必做所有那些奇怪的东西?或者我在这里遗漏了什么?

或者,是为图像或位图设置其他类型属性的更好方法吗?我正在寻找一种基本的方法来保存信息并在以后检索它.

我在这做错了什么?

c# graphics image bitmap graph-drawing

12
推荐指数
1
解决办法
2万
查看次数

如何在c#中使用投影/相机技术

我画了以下网格:

网格(顶视图)

使用以下两种方法绘制上述网格,一种用于计算网格,另一种用于计算每个单元格的中心:

//makes grid in picture box
private void drawGrid(int numOfCells, int cellSize, Graphics gr)
{
    Pen p = new Pen(Color.SteelBlue);

    for (int i = 0; i < Math.Sqrt(numOfCells) + 1; i++)
    {
        // Vertical
        gr.DrawLine(p, i * cellSize + 300, 200, i * cellSize + 300, 700);
        // Horizontal
        gr.DrawLine(p, 300, i * cellSize+200, 800, i * cellSize+200);
    }

    this.topology.SendToBack();
}


//draw the center point for each cell of the grid 
private void drawCenters(Graphics gr)
{
    for (int j …
Run Code Online (Sandbox Code Playgroud)

c# system.drawing graph-drawing drawing2d

12
推荐指数
1
解决办法
814
查看次数