gpt4 book ai didi

r - ggplot : boxplot number of observations as x-axis labels

转载 作者:行者123 更新时间:2023-12-01 01:18:58 25 4
gpt4 key购买 nike

根据我上一篇文章中的答案,我已经成功创建了一个非常漂亮的箱线图(出于我的目的),按因子分类并进行了分箱:
ggplot: arranging boxplots of multiple y-variables for each group of a continuous x

现在,我想根据每个箱线图中的观察次数自定义 x 轴标签。

require (ggplot2)
require (plyr)
library(reshape2)

set.seed(1234)
x<- rnorm(100)
y.1<-rnorm(100)
y.2<-rnorm(100)
y.3<-rnorm(100)
y.4<-rnorm(100)

df<- (as.data.frame(cbind(x,y.1,y.2,y.3,y.4)))
dfmelt<-melt(df, measure.vars = 2:5)

dfmelt$bin <- factor(round_any(dfmelt$x,0.5))

dfmelt.sum<-summary(dfmelt$bin)

ggplot(dfmelt, aes(x=bin, y=value, fill=variable))+
geom_boxplot()+
facet_grid(.~bin, scales="free")+
labs(x="number of observations")+
scale_x_discrete(labels= dfmelt.sum)

dfmelt.sum 只给我每个 bin 的观察总数,而不是每个 boxplot。
箱线图统计数据为我提供了每个箱线图的观察数量。
dfmelt.stat<-boxplot(value~variable+bin, data=dfmelt)
dfmelt.n<-dfmelt.stat$n

但是如何为每个箱线图添加刻度线和标签?

谢谢,新浪

更新

我一直在做这方面的工作。最大的问题是在上面的代码中,每个面只提供一个刻度线。由于我还想为每个箱线图绘制均值,因此我使用交互来单独绘制每个箱线图,这还会在每个箱线图的 x 轴上添加刻度线:
require (ggplot2)
require (plyr)
library(reshape2)

set.seed(1234) x<- rnorm(100)
y.1<-rnorm(100)
y.2<-rnorm(100)
y.3<-rnorm(100)
y.4<-rnorm(100)

df<- (as.data.frame(cbind(x,y.1,y.2,y.3,y.4))) dfmelt<-melt(df, measure.vars = 2:5)

dfmelt$bin <- factor(round_any(dfmelt$x,0.5))

dfmelt$f2f1<-interaction(dfmelt$variable,dfmelt$bin)

dfmelt_mean<-aggregate(value~variable*bin, data=dfmelt, FUN=mean)
dfmelt_mean$f2f1<-interaction(dfmelt_mean$variable, dfmelt_mean$bin)

dfmelt_length<-aggregate(value~variable*bin, data=dfmelt, FUN=length)
dfmelt_length$f2f1<-interaction(dfmelt_length$variable, dfmelt_length$bin)

另一方面:也许有一种更优雅的方式来组合所有这些交互。我很乐意改进。
ggplot(aes(y = value, x = f2f1, fill=variable), data = dfmelt)+
geom_boxplot()+
geom_point(aes(x=f2f1, y=value),data=dfmelt_mean, color="red", shape=3)+
facet_grid(.~bin, scales="free")+
labs(x="number of observations")+
scale_x_discrete(labels=dfmelt_length$value)

这为我提供了每个可能被标记的箱线图的刻度线。但是,在 scale_x_discrete 中使用标签只会重复每个方面中 dfmelt_length$value 的前四个值。

怎么才能规避呢?
谢谢,新浪

最佳答案

看看这个答案,它不在标签上,但它有效 - 我用过这个

Modify x-axis labels in each facet

你也可以做如下,我也用过

    library(ggplot2)
df <- data.frame(group=sample(c("a","b","c"),100,replace=T),x=rnorm(100),y=rnorm(100)*rnorm(100))
xlabs <- paste(levels(df$group),"\n(N=",table(df$group),")",sep="")
ggplot(df,aes(x=group,y=x,color=group))+geom_boxplot()+scale_x_discrete(labels=xlabs)

enter image description here

这也有效

图书馆(ggplot2)
图书馆( reshape 2)
df <- data.frame(group=sample(c("a","b","c"),100,replace=T),x=rnorm(100),y=rnorm(100)*rnorm(100))
df1 <- melt(df)
df2 <- ddply(df1,.(group,variable),transform,N=length(group))
df2$label <- paste0(df2$group,"\n","(n=",df2$N,")")
ggplot(df2,aes(x=label,y=value,color=group))+geom_boxplot()+facet_grid(.~variable)

enter image description here

关于r - ggplot : boxplot number of observations as x-axis labels,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23078098/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com