我正在对社会流动性数据进行一些社会网络分析,我使用this program来识别相关职业的集群(即具有高水平代际转移的职业集群)。
这个程序使用ggplot的一个版本来创建它的社交网络图。我正在使用的代码如下:
#MONECA analysis to find number of segments & assign occupations to segments (mob.mat is a dataframe containing the cross-tabulation of origin and destination occupations)
segments<- moneca(mx = mob.mat, segment.levels = 3, cut.off = 1, mode = "symmetric",
delete.upper.tri = TRUE)
#network plot
edges <- segment.edges(segments, cut.off = 1, method = "all", segment.reduction = 0, level = 1)
finalMONECA <- gg.moneca(segments, level = seq(segments$segment.list),
layout = layout.matrix(segments), edges = edges,
mode = "directed", vertex.size = "total", vertex.fill = "segment",
vertex.alpha = 1, vertex.color = "black", vertex.shape = 21,
show.edges = TRUE, edge.size = 1, edge.alpha = "weight",
edge.color = "grey76", edge.line = "solid", show.text = FALSE,
text.size = 3, text.color = "black", text.alpha = 1, text.vjust = 1.5,
show.borders = TRUE, border.size = 1, border.fill = NA,
border.color = "black", border.alpha = 1, border.padding = 0.7,
border.text = TRUE, border.labels = "segments", border.text.size = 4,
border.text.color = "black", border.text.vjust = -0.2,
border.text.hjust = 1, midpoints = TRUE,
midpoint.arrow = arrow(angle = 20, length = unit(0.33, "cm"), ends = "last", type = "closed"),
edge.text = FALSE, edge.text.size = 3, edge.text.alpha = 0.9, legend = "side")
这样做效果很好,并生成以下曲线:
moneca network plot
然而,我想用几种方法来改变图,我正在努力做到这一点。这是一个独特的包,我想很少有人用过,但我希望一些东西可以从网络图如何工作的知识(或ggplot更普遍的工作方式)。
首先,我想给聚类添加自定义标签(border.labels)。目前这是从“segments”中提取的,它只有聚类的代码。但是,我想手动为每个聚类创建一个标签,并将其添加到图中。
第二,我想改变填充的节点是灰度。它目前的颜色基于集群(段)的节点属于。我想保持这个方案,但使其内部的颜色灰度。
任何帮助都将非常感谢!我主要是一个Stata的人,所以我有点茫然,当谈到R。
为了修改颜色,我试着使用moneca包中的segment.colors命令,它会为线段创建一个灰度,但是,我不知道如何将这个命令的输出传递到绘图中。
1条答案
按热度按时间jyztefdp1#
我以前没有使用过这个包,但是由于它生成了一个
ggplot
对象,所以即使 Package 器函数的参数没有完成您希望它们完成的所有任务,也可以对它进行事后修改。假设我想用以下标签替换节点:
原来标签存储在输出的第8层和第10层的
aes_params
的label
参数中,所以我们可以如下所示覆盖它们:现在我们可以绘制
finalMONECA
,按照要求填充灰度(尽管实际上有40种灰度要着色,所以这几乎是无用的)