我正在尝试使用以下代码创建以下图表:
x = sample(0:1,10,replace = TRUE)
y = sample(0:1,10,replace = TRUE)
df = data.frame(x,y)
dfSummary<-ddply(df, "x", summarise, sdbar = sd(y), ybar = mean(y))
ggplot(dfSummary, aes(x,y = ybar))+
geom_bar(stat="identity",fill="dark blue")+
geom_errorbar(ymin=(pmax(0,dfSummary$ybar-dfSummary$sdbar)),ymax=(pmin(dfSummary$ybar+dfSummary$sdbar,1)))+
scale_y_continuous(limits = c(0, 1),breaks=seq(0,1,.1)) +
theme(panel.grid = element_blank()) +
theme(panel.background =element_blank())+
scale_x_discrete( breaks= c(0,1), limits = c(0,1),labels= c("x = 0", "x = 1")) +
ylab("Proportion of objective responders")
您在下面看到的结果图像显示了一个图,其中x = 0和x = 1的两个条占据了y轴长度的一半(在左侧),但没有填写整个绘图区域。
我非常感谢您如何在图像宽度上显示条形图。
我通过将x更改为一个因子来尝试@heroka建议的内容。现在代码看起来像这样:
x = sample(0:1,10,replace = TRUE)
y = sample(0:1,10,replace = TRUE)
df = data.frame(x,y)
df$x = as.factor(df$x)
dfSummary<-ddply(df, "x", summarise, sdbar = sd(y), ybar = mean(y))
ggplot(dfSummary, aes(x,y = ybar))+
geom_bar(stat="identity",fill="dark blue")+
geom_errorbar(ymin=(pmax(0,dfSummary$ybar-dfSummary$sdbar)),ymax=(pmin(dfSummary$ybar+dfSummary$sdbar,1)))+
scale_y_continuous(limits = c(0, 1),breaks=seq(0,1,.1)) +
theme(panel.grid = element_blank()) +
theme(panel.background =element_blank())+
scale_x_discrete( breaks= c(0,1), limits = c(0,1),labels= c("x = 0", "x = 1")) +
ylab("Proportion of objective responders")
我得到图像Box plot with incorrect labels,你可以看到标签“x = 0”和“x = 1”现在不在正确的位置。 “x = 1”位于错误的条形下,“x = 0”甚至不出现。我该如何解决这个问题?
答案 0 :(得分:1)
正如Heroka所提到的,将x
变量作为一个因素。
您的比例问题是因为在scale_x_discrete
中您指定了数字中断&amp;您不再需要的限制(如果as.numeric
您的x
因素,您将获得1和2,而不是0和1,这就是为什么1标签与x = 0对齐的原因)。
p <- ggplot(dfSummary, aes(x,y = ybar))+
geom_bar(stat="identity",fill="dark blue")+
geom_errorbar(ymin=(pmax(0,dfSummary$ybar-dfSummary$sdbar)),ymax=(pmin(dfSummary$ybar+dfSummary$sdbar,1)))+
scale_y_continuous(limits = c(0, 1),breaks=seq(0,1,.1)) +
theme(panel.grid = element_blank()) +
theme(panel.background =element_blank())+
ylab("Proportion of objective responders")
你可以:
省略'break'和'limits'参数
p + scale_x_discrete(labels=c("x=0", "x=1"))
由于x
是一个因素,只需将值设为标签'x = 0'和'x = 1'而不是'0'和'1'
dfSummary$x <- factor(c('x=0', 'x=1'))
# just use the code for `p` above to make your graph, no scale_x_discrete
# needed.