这是一个非常具体inforgraphic challange altough的fundemental问题是你如何使用matplotlib,卡里奥或其他蟒libary建立单词之间archs。

给定一个以下数据结构。

我说你,7 | 我,苹果,9 | 苹果,你,1 | 自行车,我,5

姓名将被水平地显示与名称之间的关系最大于其他然后将有被加权archs名称。 10加权拱将是两倍5加权拱一样厚。

灵感来源于:类似diverstiy。 http://similardiversity.net/

让challange开始!

有帮助吗?

解决方案

有几个库,其中至少有一个依赖于Matplotlib,会做你想要什么。我建议Networkx(www.networkx.lanl.gov)来构建你的图形结构,然后你可以用它来调用相关Matplotlib方法来绘制。 Networkx和Matplotlib的工作很好地结合在一起。

import networkx as NX
import matplotlib.pyplot as PLT
Gh = NX.Graph()
Gh.add_edge("You", "Bike", weight=1.0)
Gh.add_edge("Bike", "Apple", weight=0.9)
Gh.add_edge("Me", "Bike", weight=1.1)
all_nodes = Gh.nodes()
# to scale node size with degree:
scaled_node_size = lambda(node) : NX.degree(Gh, node) * 700
position = NX.spring_layout(Gh)    # just choose a layout scheme
NX.draw_networkx_nodes(Gh, position, node_size=map(scaled_node_size, all_nodes))
NX.draw_network_edges(Gh, position, Gh.edges(), width=1.0, alpha=1.0, edge_color="red")
# now for the Matplotlib part:
PLT.axis("off")
PLT.show()

可以看到,可以通过将改变“重量”参数的任何的“边缘”的方法,就如同我是做节点缩放以同样的方式的一个因素缩放边缘。

我还建议pygraphviz(显然使用的graphviz作为其后端)。这是非常类似于Netwworkx(同一导线显影剂)。

其他提示

matplotlib是不正确的图书馆在这里,因为它不是一个通用图形库。你所需要的就是要么像开罗,或者更简单,你可以用图形处理能力做的任何GUI工具包,如PyQt的。另一个可行的办法是pygame的,具有良好的绘图功能,以及。

如果你想要一个例子,看到这个开罗样品页面,第一个样品 - 弧。你只写文本词,然后使用弧代码它们之间的任何宽度和颜色的电弧。

我实在不明白其中的困难和挑战。所有你需要的是一个图形库,可以绘制文本和半圈,这是有可能在几乎一切。没有必要为贝塞尔曲线。例如,你可以简单地创建一个SVG文件(那么你甚至不需要任何库,可以很好地嵌入这个在网页并使用JavaScript来使它互动)。

在实际绘制很简单:一个圆的中心在两个词之间的中间,半径是它们之间的距离的一半。然后,可以调整行程,以反映其他量。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top