在“图形”包中,可以向直方图添加第二个x轴(表示分布的百分位数),如下所示:
x <- rnorm(1000)
hist(x, main="", xlab="Bias")
perc <- quantile(x, seq(from=.00, to=1, by=.1))
axis(1,at=perc,labels=c("0","10%","20%","30%","40%","50%","60%","70%","80%","90%","100%"),cex=0.5, pos= -90)
当然,这看起来很尴尬。那么,如何修改下面的ggplot2代码来添加第二个x轴,同时第一个x轴应该表示原始值呢?
library(ggplot2)
theme_classic(base_size = 12, base_family = "")
x <- rnorm(1000)
qplot(x, main="", xlab="Bias")
perc <- quantile(x, seq(from=.00, to=1, by=.1))
有什么帮助吗?首先要感谢大家!
发布于 2014-03-09 17:42:00
我不能完全确定您想要的是什么,因为您的第一个示例实际上并没有产生您所描述的结果。
但就简单地将百分比与沿x轴的原始值相加而言,最简单的策略可能是在一组标签中简单地将两者结合起来,并使用换行符:
dat <- data.frame(x = rnorm(1000))
perc <- quantile(dat$x,seq(from = 0,to = 1,by = 0.1))
l <- paste(round(perc,1),names(perc),sep = "\n")
> ggplot(dat,aes(x = x)) +
geom_histogram() +
scale_x_continuous(breaks = perc,labels = l)
发布于 2014-03-09 18:49:50
这里是另一种方法,它使用annotate(...)
,并且不要求两个尺度具有相同的断点。
library(ggplot2)
library(grid)
set.seed(123)
x <- rnorm(1000)
perc <- quantile(x, seq(from=.00, to=1, by=.1))
labs <- gsub("\\%","",names(perc)) # strip "%" from names
yval <- hist(x,breaks=30,plot=F)$count
yrng <- diff(range(yval))
g1 <- ggplot() +
geom_histogram(aes(x=x))+
xlim(range(x))+
coord_cartesian(ylim=c(0,1.1*max(yval)))+
labs(x="")+
annotate(geom = "text", x = perc, y = -0.1*yrng, label = labs, size=4) +
annotate(geom = "text", x=0, y=-0.16*yrng, label="Bias", size=4.5)+
theme(plot.margin = unit(c(1, 1, 2, 1), "lines"))
g2 <- ggplot_gtable(ggplot_build(g1))
g2$layout$clip[g2$layout$name == "panel"] <- "off"
grid.draw(g2)
这将使用annotate(...)
添加第二个x轴和标签。最后三行代码关闭视口的剪裁。否则注解是不可见的。
感谢@Henrik对this question的回答。
https://stackoverflow.com/questions/22285360
复制