Ответ 1
Вы можете попробовать, используя library(scales)
:
+ scale_y_continuous(limits=c(2000,2500),oob = rescale_none)
вместо этого, как описано здесь.
У меня проблема с 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))
который дает мне это
Тот же код без указанных ограничений работает нормально. Geom_errorbar(), похоже, не связан с проблемой, но он показывает, где должны отображаться полосы.
Я пробовал использовать coord_cartesian(ylim=c(2000,2500))
, который работает для ограничения yaxis и получения баров для отображения, но метки меток перепутались, и я не понимаю, что я с ним делаю.
Спасибо за любые предложения! (Я использую R 2.15.0 и ggplot2 0.9.0)
Вы можете попробовать, используя library(scales)
:
+ scale_y_continuous(limits=c(2000,2500),oob = rescale_none)
вместо этого, как описано здесь.
Добавление ответа для моего случая, который был немного иным, если кто-то сталкивается с этим:
При использовании 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)
.
Надеюсь, что это поможет кому-то еще, когда вышеприведенные ответы помогут вам только частично.
Это сработало для меня на основе ранее предоставленной связи.
p + coord_cartesian(ylim=c(5,15))