我正在做一个项目,在该项目中我有多个响应变量并希望显示有序的毛毛虫图。这对于基本的 R 绘图功能来说相当简单
#generate random data frame
set.seed(42)
my_df<-data.frame(x=rnorm(100), y=runif(100,-2,2), z=rpois(100, 10))
#3 panels of plots
par(mfrow=c(1,3))
#note the abline to show an axis at y=0
sapply(c("x", "y", "z"), function(i){ plot(sort(my_df[[i]])); abline(0,0)})
但我不知道如何用 ggplot2 做到这一点。要将三个面板放在一起,我知道我必须融化数据框,但是……如何通过变量进行排序并稍后使用 0 轴进行绘图?到目前为止,我所拥有的只是...
melt_df<-melt(my_df)
qplot(1:100, value, data=melt_df, geom="point",facets=~variable)+theme_bw(base_size=16)
最佳答案
建立 jebyrnes 答案 - 您可以将 y 轴设置为将自由比例作为 facet_wrap
中的参数。我们可以使用 geom_hline()
添加一条水平线:
ggplot(melt_df, aes(1:100, value)) + geom_point() +
facet_wrap(~ variable, ncol = 3, scales = "free_y") +
geom_hline(aes(intercept = 0), linetype = 2) +
theme_bw(base_size = 16)
您可以通过使用
stat_qq()
获得等效结果,并避免事先使用 ddply
进行排序。不同之处在于我们只需要将 sample
参数传递给 aes
:ggplot(melt_df, aes(sample = value)) + geom_point(stat = "qq") +
facet_wrap(~ variable, ncol = 3, scales = "free_y") +
geom_hline(aes(intercept = 0), linetype = 2) +
theme_bw(base_size = 16)
关于r - ggplot2 中的毛毛虫图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5463471/