Подтвердить что ты не робот

Строки geom_bar не отображаются при указании илим

У меня проблема с geom_bars, где бары не отображаются, когда я указываю ограничения по оси y. Я считаю, что следующее должно воспроизвести проблему:

data <- structure(list(RoleCond = structure(c(1L, 1L, 2L, 2L), .Label = c("Buyer", "Seller"), class = "factor"), 
                   ArgCond = structure(c(1L, 2L, 1L, 2L), .Label = c("No Argument", "Argument"), class = "factor"), 
                   mean = c(2210.71428571429, 2142.70833333333, 2282.40740740741, 2346.2962962963), 
                   se = c(20.1231042081511, 16.7408757749718, 20.1471554637891, 15.708092540868)), 
                   .Names = c("RoleCond", "ArgCond", "mean", "se"), row.names = c(NA, -4L), class = "data.frame")

library(ggplot2)    
ggplot(data=data, aes(fill=RoleCond, y=mean, x=ArgCond)) + 
      geom_bar(position="dodge", stat="identity") + 
      geom_errorbar(limits, position=dodge, width=0.1, size=.75) + 
      scale_y_continuous(limits=c(2000,2500))

который дает мне это

no bars

Тот же код без указанных ограничений работает нормально. Geom_errorbar(), похоже, не связан с проблемой, но он показывает, где должны отображаться полосы.

Я пробовал использовать coord_cartesian(ylim=c(2000,2500)), который работает для ограничения yaxis и получения баров для отображения, но метки меток перепутались, и я не понимаю, что я с ним делаю.

Спасибо за любые предложения! (Я использую R 2.15.0 и ggplot2 0.9.0)

4b9b3361

Ответ 1

Вы можете попробовать, используя library(scales):

+ scale_y_continuous(limits=c(2000,2500),oob = rescale_none)

вместо этого, как описано здесь.

Ответ 2

Добавление ответа для моего случая, который был немного иным, если кто-то сталкивается с этим:

При использовании position="dodge" полосы автоматически изменяются по горизонтали, чтобы заполнить пространство, которое часто выходит за пределы самих данных. В результате даже если ваши ограничения x-axis и y-axis равны limits=c(min-1, max+1, для определенных наборов данных position="dodge" может изменить размер за пределами этого предельного диапазона, в результате чего бары не появятся. Это может произойти даже в том случае, если пол лимита равен 0, в отличие от вышеприведенного случая.

Использование oob=rescale_none в обоих scale_y_continous() И scale_x_continuous() устраняет эту проблему, просто отключив изменение размера, сделанное position="dodge".

Как и в предыдущем комментарии, для этого требуется package:scales, поэтому сначала запустите library(scales).

Надеюсь, что это поможет кому-то еще, когда вышеприведенные ответы помогут вам только частично.

Ответ 3

Это сработало для меня на основе ранее предоставленной связи.

p + coord_cartesian(ylim=c(5,15))