【发布时间】:2014-07-24 03:45:44
【问题描述】:
我正在尝试使用 facet_grid 在 ggplot2 中编写自定义散点图矩阵函数。我的数据有两个分类变量和一个数值变量。
我想根据其中一个分类变量来分面(制作散点图行/列),并根据另一个分类变量更改绘图符号。
我首先构建一个更大的数据集,其中包含我创建散点图面板的分类变量的所有组合 (combs)。
我的问题是:
- 如何使用 geom_rect 将 facet_grid 中的对角面板和上面板变白(目前我只能使中间的面板变黑)?
- 如何将构面的标题分别移动到底部和左侧?
- 如何删除左上角和右下角刻面的刻度轴和标签?
提前致谢。
require(ggplot2)
# Data
nC <- 5
nM <- 4
dat <- data.frame(
Control = rep(LETTERS[1:nC], nM),
measure = rep(letters[1:nM], each = nC),
value = runif(nC*nM))
# Change factors to characters
dat <- within(dat, {
Control <- as.character(Control)
measure <- as.character(measure)
})
# Check, lapply(dat, class)
# Define scatterplot() function
scatterplotmatrix <- function(data,...){
controls <- with(data, unique(Control))
measures <- with(data, unique(measure))
combs <- expand.grid(1:length(controls), 1:length(measures), 1:length(measures))
# Add columns for values
combs$value1 = 1
combs$value2 = 0
for ( i in 1:NROW(combs)){
combs[i, "value1"] <- subset(data, subset = Control==controls[combs[i,1]] & measure == measures[combs[i,2]], select = value)
combs[i, "value2"] <- subset(data, subset = Control==controls[combs[i,1]] & measure == measures[combs[i,3]], select = value)
}
for ( i in 1:NROW(combs)){
combs[i,"Control"] <- controls[combs[i,1]]
combs[i,"Measure1"] <- measures[combs[i,2]]
combs[i,"Measure2"] <- measures[combs[i,3]]
}
# Final pairs plot
plt <- ggplot(combs, aes(x = value1, y = value2, shape = Control)) +
geom_point(size = 8, colour = "#F8766D") +
facet_grid(Measure2 ~ Measure1) +
ylab("") +
xlab("") +
scale_x_continuous(breaks = c(0,0.5,1), labels = c("0", "0.5", "1"), limits = c(-0.05, 1.05)) +
scale_y_continuous(breaks = c(0,0.5,1), labels = c("0", "0.5", "1"), limits = c(-0.05, 1.05)) +
geom_rect(data = subset(combs, subset = Measure1 == Measure2), colour='white', xmin = -Inf, xmax = Inf,ymin = -Inf,ymax = Inf)
return(plt)
}
# Call
plt1 <- scatterplotmatrix(dat)
plt1
【问题讨论】:
-
你看过
ggpairs包GGally吗?看起来你想要的大部分东西都可以用这个函数很容易地完成,你只需要重塑你的数据集(比如dcast(dat, Control ~ measure),如果你使用reshape2)。
标签: r ggplot2 statistics