在我关于沉默的螺旋的研究中,涉及到多主体建模在不同条件下的运行结果。比如,检验人口总数量对于加速沉默的螺旋的影响,我在人口为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

ggplot2_sos