【发布时间】:2014-11-05 00:34:03
【问题描述】:
我想知道如何绘制网络(如果可以的话),但我想要一个饼图而不是圆作为节点,因为我有一个包含社区的图表,我想用社区的数量来表示每个社区在每个部门工作的人。
编辑: 好的,我刚刚试过这段代码,结果是好的:
import community
import networkx as nx
import matplotlib.pyplot as plt
import numpy as np
import random as rnd
import operator as op
import matplotlib.patches as mpatches
import math
Com = nx.Graph()
Com.add_nodes_from(['0','1','2','3','4'])
comlist=[('0','2',5.0),('3','0',3.0),('1','3',1.0),('2','3',7.3)]
Com.add_weighted_edges_from(comlist)
ListDeps = ['literature','maths','science','physical education']
HistCom = {'0':{'literature':20,
'maths':24,
'science':12},
'1':{'literature':1,
'physical education':14,
'science':6},
'2':{'science':15},
'3':{'physical education':4,
'maths':20},
'4':{'literature':20,
'maths':24,
'science':12}}
pos=nx.spring_layout(Com)
fig=plt.figure(figsize=(5,5))
ax=plt.axes([0,0,1,1])
ax.set_aspect('equal')
nx.draw_networkx_edges(Com,pos,ax=ax)
plt.xlim(-0.5,1.5)
plt.ylim(-0.5,1.5)
trans=ax.transData.transform
trans2=fig.transFigure.inverted().transform
piesize=0.1 #Degree
p2=piesize/2.0
dep_color = dict()
for com in Com:
xx,yy=trans(pos[com]) # figure coordinates
xa,ya=trans2((xx,yy)) # axes coordinates
a = plt.axes([xa-p2,ya-p2, piesize, piesize])
a.set_aspect('equal')
contats = len(HistCom[com].items())
fracs = []
ColorFrac = []
for dep,n in sorted(HistCom[com].items(), key=op.itemgetter(1), reverse=True):
fracs.append(n/sum(HistCom[com].values()))
dep_color[dep] = dep_color.get(dep, (rnd.random(),rnd.random(),rnd.random()))
ColorFrac.append(dep_color[dep])
a.pie(fracs, colors = ColorFrac)
P = [mpatches.Patch(color=dep_color[dep], label=dep) for dep in dep_color]
plt.legend(handles=P,bbox_to_anchor=(0.,1.02,1.,.102), loc=3,ncol=3, mode="expand", borderaxespad=0.)
plt.show()
我遇到的问题是,当我尝试绘制图例时,我试图将它放在图上方,但它出现在中间。
【问题讨论】:
-
请参阅matplotlib.org/examples/api/scatter_piecharts.html,这需要做一些事情。 pie 函数也有一个 kwarg 来设置它的中心(但我认为只在 master 上)所以你可以使用 networkx 来获取中心/绘制边缘,然后使用上面的两种技术之一来绘制标记。我认为没有一个完整的交钥匙解决方案可以满足您的需求。
-
另外,你的问题被否决了,因为它相当模糊/没有代码。我建议尝试我建议的两件事中的一件,当您遇到特定问题时,就该问题提出一个新问题,您会得到更好的答复。 ('我试过代码 X,它应该做 Y,但它做的是 Y-prime。这是怎么回事?')
标签: python matplotlib pie-chart networkx