我有一个使用igraph制作的图表.我想分散节点.到目前为止我找到的唯一方法是缩放布局并强制绘图命令不重新缩放.
png("kmeansColouredNetwork.png", width=1200,height = 1000)
col=c("yellow", "saddlebrown", "brown1","chartreuse2", "chocolate1","darkorange" ,"deepskyblue1", "hotpink1","plum2")
for(i in 1:9){
V(graph)$cluster[which(V(graph)$name %in% kmeans[,i])]<-col[i]
}
V(graph)$color=V(graph)$cluster
coords <- layout.fruchterman.reingold(graph)*0.5
plot(graph, layout = coords, vertex.label=NA, rescale=FALSE, vertex.size=degree(graph)*.25,vertex.color=V(graph)$cluster)
labels = paste("cluster:", 1:length(colours))
legend("left",legend=labels, col=col, pch=16, title="K means clustered subgroups")
dev.off()
Run Code Online (Sandbox Code Playgroud)
如果我不重新缩放,中央高度连接的节点聚集在一起,我得到一个这样的图形,其中图形体内的模式无法辨别:

另一方面,如果我告诉plot命令不要重新缩放,那么我得到这个:

图案可辨别的地方,但图表的一半不在图中.这不是绘图大小的问题,就好像我增加了png的尺寸一样,它仍然将图形置于绘图边缘的中心.
这不是布局的问题 - 我尝试过fruchterman.reingold,layout_nicely,reingold.tilford,layout.circle,布局随机,同样的事情发生了.
显然曾经有一个变量来设置节点之间的排斥因子,但这似乎已被弃用.
如何将图表的节点展开或重新缩放并重新定位图?
所以,首先,我意识到有很多关于处理 Twitter 速率限制的问题。我不知道为什么,但到目前为止我发现的那些都不适合我。
我正在使用 tweepy。我正在尝试获取用户关注者的所有关注者的列表。正如预期的那样,由于 twitter 的速率限制,我不能一下子把所有东西都拉下来。我安装了 tweepy v 3.5,因此指的是http://docs.tweepy.org/en/v3.5.0/api.html。要获取我使用的原始用户的关注者列表:
auth = tweepy.OAuthHandler(consumer_key,consumer_secret)
auth.set_access_token(access_token, access_secret)
api = tweepy.API(auth)
followerIDs = []
for page in tweepy.Cursor(api.followers_ids, screen_name=originatingUser, wait_on_rate_limit = True, wait_on_rate_limit_notify = True).pages():
followerIDs.extend(page)
Run Code Online (Sandbox Code Playgroud)
追随者 = api.lookup_users(追随者)
这有点作用,但很快变成:
tweepy.error.TweepError: [{u'message': u'Rate limit exceeded', u'code': 88}]
Run Code Online (Sandbox Code Playgroud)
我的理论是,然后使用以下内容为每个 followerID 检索每个用户的关注者:
for followerID in followerIDs:
for page in tweepy.Cursor(api.followers_ids, id=followerID, wait_on_rate_limit = True, wait_on_rate_limit_notify = True).pages():
followerIDs.extend(page)
Run Code Online (Sandbox Code Playgroud)
我遇到的另一个问题是当我尝试查找用户名时。为此,它使用 itertools 中的 grouper 函数将关注者分成 100 组(api.lookup_users 一次只能接受 100 个 ID)并使用
followerIDs = grouper(followerIDs,100)
for …Run Code Online (Sandbox Code Playgroud)