2016-02-22 5 views
1

Я пытаюсь создать следующий график с помощью следующего кода:ggplot2 не используя всю площадь участка

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") 

Полученное изображение, которое вы можете увидеть ниже показывает сюжет, где два бара для х = 0 и x = 1 занимают половину длины оси y (слева), но не заполняют всю площадь участка.

Я очень благодарен за понимание того, как сделать штрих-код отображаемым по ширине изображения.

enter image description here

Я попробовал то, что @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, где вы можете увидеть, что метки «х = 0» и «х = 1» теперь не в нужном месте. «x = 1» находится под неправильным баром, и «x = 0» даже не появляется. Как я могу это исправить?

+0

Возможно, вы захотите рассмотреть вопрос об установке x в качестве фактора здесь, я думаю, проблема возникает из-за смешивания непрерывной и дискретной оси. – Heroka

ответ

1

Как упоминалось в Heroka, сделайте свой x переменным фактором. Ваша проблема с масштабами заключается в том, что в вашем scale_x_discrete вы указываете числовые перерывы &, которые вам больше не нужны (если вы 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") 

Вы можете:

  1. опускает 'разрывы' и аргументы 'пределы'

    p + scale_x_discrete(labels=c("x=0", "x=1")) 
    
  2. Поскольку 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. 
    
Смежные вопросы