这是一个非常具体的inforgraphic challange尽管这个基本问题是如何使用matplotlib,cario或其他python库在单词之间构建arch.
给出以下数据结构.
我,你,7 |
我,苹果,9 |
苹果,你,1 |
自行车,我,5
名称将水平显示,其中关系最多的名称大于其他名称,然后名称之间将存在加权拱. 10加权拱的厚度是5加权拱的两倍.
灵感来自:类似的多样化. http://similardiversity.net/
让挑战开始吧!
解决方法:
有几个库,其中至少有一个依赖于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(同一个主要开发人员)非常相似.