拱形关系信息图表在Python
-
16-09-2019 - |
题
这是一个非常具体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(同一导线显影剂)。
其他提示
我实在不明白其中的困难和挑战。所有你需要的是一个图形库,可以绘制文本和半圈,这是有可能在几乎一切。没有必要为贝塞尔曲线。例如,你可以简单地创建一个SVG文件(那么你甚至不需要任何库,可以很好地嵌入这个在网页并使用JavaScript来使它互动)。
在实际绘制很简单:一个圆的中心在两个词之间的中间,半径是它们之间的距离的一半。然后,可以调整行程,以反映其他量。
不隶属于 StackOverflow