我创建了一个简单的 Dagre 示例,用于在单击图中的现有节点时动态添加节点。但是,重新渲染会在同一层内创建不同的相对顺序。无论如何,这个问题有解决办法吗?
小提琴可以在这里找到: http: //jsfiddle.net/gke2dann/
提前致谢。
// Create a new directed graph
var g = new dagreD3.Digraph();
/* populate graph... see fiddle */
var renderer = new dagreD3.Renderer();
var layout = dagre.layout();
var render = function() {
layout.run(g);
renderer.run(g, d3.select("svg g"));
};
render();
svg.onclick = function(evt) {
var nodeId = evt.target.__data__;
for (var i = 0; i <= Math.random() * 10; ++i) {
var newNodeId = nodeId + "_sub" + i;
g.addNode(newNodeId, { label: "Bla" });
g.addEdge(null, newNodeId, nodeId); …
Run Code Online (Sandbox Code Playgroud) 我正在用大标签绘制图表。有没有办法包裹标签,使它们适合尺寸的顶点。
这就是我到目前为止所拥有的
p1 = gt.graph_draw(gr1,
output_size=(2000, 6000),
pos=pos1,
vertex_shape="square",
bg_color=(256, 256, 256, 1),
vertex_size=20,
output='test1.png',
vertex_text=gr1.vp['label'],
vertex_fill_color=gr1.vp['color'])
Run Code Online (Sandbox Code Playgroud)
我正在graphviz中绘制一个二部图,我希望它有两列由直线连接的节点(以匹配其他地方使用的样式)。我基本上可以得到我想要的东西(见图片),但柱子靠得太近,这使得边缘不必要地难以追踪。
我试图在前两个节点之间添加一个非常低的权重连接,希望它将两个子图分开,但这不起作用(并且经常弄乱布局的其余部分)。有没有办法将右侧的节点列进一步向右移动。
这是一个示例,显示了我所看到的问题
这是我用来生成这个图的代码
graph G {
splines=false;
node[shape=circle, style=filled]
subgraph cluster_1 {
subgraph cluster_1r {
a12 [label="a",fillcolor=lightgrey]
b12 [label="b",fillcolor=lightgrey]
c12 [label="c",fillcolor=lightgrey]
d12 [label="d",fillcolor=lightgrey]
e12 [label="e",fillcolor=lightgrey]
a12--b12--c12--d12--e12 [style=invis]
}
subgraph cluster_1l {
a11 [label="a",fillcolor=white]
b11 [label="b",fillcolor=white]
c11 [label="c",fillcolor=white]
d11 [label="d",fillcolor=white]
e11 [label="e",fillcolor=white]
a11--b11--c11--d11--e11 [style=invis]
}
c11--a12 [constraint=false]
c11--b12 [constraint=false]
d11--b12 [constraint=false]
e11--a12 [constraint=false]
e11--b12 [constraint=false]
}
}
Run Code Online (Sandbox Code Playgroud) 我期待编写一个脚本,该脚本将自动从文件中获取输入并声明节点和边缘,并生成可在任何可视化软件中可视化的图形.
我试过点语言和graphViz.这种语言使用语法清楚地声明图形的节点如下:node1;
,node2;
并且不允许任何特殊字符,除了_
.
它适用于所有情况,但是当我想声明一个名为java.lang.object
它的节点时,由于存在而显示语法错误.
,我无法更改其语法.
任何人都可以通过建议其他语言来帮助我,这些语言可以从文本文件中获取输入,并可以在任何可视化软件上绘制图形.
描述
我目前正在为我们的客户使用Google Maps V3,他们要求我们实施一个绘图工具,允许他们创建连接的线流并计算距离.但是,Google Maps V3图库管理器库似乎非常有限,它允许我们捕获折线的点击事件.
我们的守则
google.maps.event.addListener(map, 'click', function(event){
//TODO: Store lat/long of click for distance calculation later
});
google.maps.event.addListener(drawingManager, 'overlaycomplete', function(e) {
//TODO: Display the total distance of the line
});
Run Code Online (Sandbox Code Playgroud)
目标
google.maps.event.addListener(drawingManager, 'polylineclick', function(event){
//TODO: Store lat/long of line for distance calculation and display updated distance.
});
Run Code Online (Sandbox Code Playgroud)
如您所见,我们希望在用户创建折线时捕获纬度/经度,并在创建每条线时显示距离,而不是在整条折线完成后显示距离.
此外,我知道我们可以通过创建自定义处理程序并使用地图的点击方法做一些魔术并在纬度/长度之间手动绘制线条来模仿这一点,但Google Maps API没有针对其绘图管理器的点击方法似乎很奇怪.
澄清
最终目标是具有功能,因此在绘制折线时,我们可以动态显示折线的总长度.IE我首先绘制一条线,出现一个显示"Total Line is X"的部分,我点击第二个点创建第二行,文本更新为"x"+"y",我点击第三个并更新到"x"+"y"+"z"等.这就是为什么我们希望有一个事件来处理"lineDrawn"或"polylineClick"来存储这些纬度/长度,我们可以计算动态创建的线的长度没有用户停止绘制线条以查看总长度.
编辑:更新了我们目标中的 addListener 以使用drawingManager,而不是map.
编辑:添加澄清部分.
javascript google-maps graph-drawing google-maps-api-3 google-maps-markers
我有一个由其邻接矩阵(一个numpy数组)描述的无向图,我想绘制它,顶点放在一个n正多边形中.此代码有效:
n = adyacency_mathix.shape[0]
axis = np.linspace(0, 2*np.pi, n, endpoint=False)
x, y = np.cos(axis), np.sin(axis)
for i in xrange(n):
for j in xrange(i + 1, n):
if self.matrix[i, j] == 1:
pyplot.plot((x[i], x[j]), (y[i], y[j]), color = 'blue')
pyplot.show()
Run Code Online (Sandbox Code Playgroud)
但可以优化.
我有一个使用 tkinter 创建的应用程序。只有一个窗口,我可以在其中输入 X 和 Y。有了这些 x 和 y,我的应用程序应该使用 matplotlib 创建一个图形。
第一次可以正常工作,但其他时候则不行。我的意思是,我打开应用程序,输入 X 和 Y,单击按钮,应用程序创建图形,然后我输入新的 X 和 Y,单击按钮,这不起作用,图形是相同的,不是新的。我搜索了很多网站,但没有一个解决方案有效。
部分代码如下所示:
from tkinter import *
import matplotlib
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk
from matplotlib.figure import Figure
window_width = 1000
window_height = 600
root = Tk()
global_fig = None
def create_draw(x_dots, y_dots):
global global_fig
if global_fig is not None:
global_fig.clf()
global_fig = Figure(figsize=(5, 4), dpi=100)
global_fig.add_subplot(111).plot(x_dots, y_dots)
canvas = FigureCanvasTkAgg(global_fig, master=root) # A tk.DrawingArea.
canvas.draw()
canvas.get_tk_widget().pack(side=TOP, fill=BOTH, expand=1)
toolbar …
Run Code Online (Sandbox Code Playgroud) python ×4
dot ×2
graphviz ×2
javascript ×2
matplotlib ×2
bipartite ×1
d3.js ×1
dagre-d3 ×1
drawing ×1
google-maps ×1
graph-tool ×1
java ×1
latex ×1
numpy ×1
plot ×1
tkinter ×1