在我关于沉默的螺旋的研究中,涉及到多主体建模在不同条件下的运行结果。比如,检验人口总数量对于加速沉默的螺旋的影响,我在人口为1000, 1500, 2000条件下各模拟100次,直到90%的个体沉默,每一次运行才停止。我假设:人口总量越大,沉默得越快。
三个数据下载链接见:
- http://7lrzgn.com1.z0.glb.clouddn.com/RQ5P1000.csv
- http://7lrzgn.com1.z0.glb.clouddn.com/RQ5P1500.csv
- http://7lrzgn.com1.z0.glb.clouddn.com/RQ5P2000.csv
本文将介绍如何使用R软件中的ggplot2展示不同参数条件下多主体建模的数据,主要包括数据读取、数据清洗和数据可视化三个环节。
首先,读取三个数据
p1000<-read.csv("RQ5P1000.CSV", header = T, sep = ",", stringsAsFactor=TRUE)
p1500<-read.csv("RQ5P1500.CSV", header = T, sep = ",", stringsAsFactor=TRUE)
p2000<-read.csv("RQ5P2000.CSV", header = T, sep = ",", stringsAsFactor=TRUE)
第二步,将宽的数据转成长的数据
使用reshape包里的melt函数,非常方便。
library(reshape)
reshape_data = function(dt){
dt$time = 1:nrow(dt)
dt= melt(dt, id = c("time"))
dt = subset(dt, is.na(dt$value)==FALSE)
return(dt)
}
p1000 = reshape_data(p1000)
p1500 = reshape_data(p1500)
p2000 = reshape_data(p2000)
p1000$Group = 'P = 1000'
p1500$Group = 'P = 1500'
p2000$Group = 'P = 2000'
dat = rbind(p1000, p1500, p2000)
第三步,当数据准备好之后,就是可视化了。
这里的难点是,我要在一张图里展现三个条件下的结果,同时我们知道每个条件下有100条时间序列。为了更细节地展现在每个时间点的波动情况,我使用了箱图(boxplot)的方法。
在ggplot2当中,需要将x轴变量的时间转成factor,但是这个时候有一个问题,x轴的xlab太多了,有两百多个,怎么办呢?手工设置吧,使用scale_x_discrete。 这里还隐藏着一个处理中文的问题,在theme_bw()当中,设置base_family = ‘STHeiti’,这样就以黑体显示了,同样可以设置为楷体,base_family = ‘STKaiti’。
library(ggplot2)
a = ggplot(dat)+
geom_boxplot(aes(x=as.factor(time), y=value, color= Group),
position = position_dodge(width = .9),
outlier.shape=NA)+
scale_x_discrete(breaks=c(50, 100, 150, 200),
labels=c("50", "100", "150", "200"))+
xlab("时间")+ylab("沉默的人数") +
theme_bw(base_family = 'STHeiti', base_size = 14) #+facet_wrap(~Group)
c <- a + facet_grid(Group ~ .) + theme(legend.position = "none")
c
Leave a Comment