Редактировать
После осветления OP ищет для решения для построения данных, который имеет все нули для у-значений, так что оси не заданы функцией expand
равным по обе стороны от 0. Здесь находится один из возможных решений:
пример данных:
set.seed(1)
df <- data.frame(x=1:10,
y=rep(0, 10))
df1 <- data.frame(x=1:10,
y=sample(1:10 , 10, replace=T))
df
df1
Добавить обертку, которая строит все-ноль данные соответственно:
plot.zeros <- function(data) {
upper.lim <- ifelse(any(data$y != 0), NA, 1)
print(ggplot(data, aes(x, y)) + geom_point() +
scale_y_continuous(limits = c(0, upper.lim), expand = c(0.01, 0)))
}
plot.zeros(df)
plot.zeros(df1)
Это использует простую функцию, чтобы установить верхний предел по оси Y. 1, если все данные имеют Y-значения 0. Если любые y-значения отличны от нуля, минимальная ось y устанавливается равной 0, а максимум определяется внутренним образом на ggplot
. Вы можете изменить значение y-max по желанию, изменив «else» часть инструкции ifelse
на что-то другое, кроме 1. Кроме того, если вы не хотите связываться с аргументом expand
и просто хотите использовать значение по умолчанию, вы может использовать ylim(0, upper.lim)
вместо вызова scale_y_continuous
.
End Edit
Если ваши данные всегда положительна, но иногда минимальное значение выше нуля, вы можете использовать expand_limits
. В этом случае, это должно дать вам то, что вы ищете:
df <- data.frame(type=sample(c("a","b"), 20, replace=T),
x=rep(1:10, 2),
y=c(rep(0, 10), sample(1:10 , 10, replace=T)))
df
ggplot(df,aes(x,y)) + geom_point() +
facet_wrap(facets='type', scales="free") +
expand_limits(y=0)
В качестве альтернативы, вы можете использовать вручную установить масштаб, но это не будет работать для facet_wrap
или grid_wrap
, как это было бы установить масштаб для всех граней:
scale_y_continuous(limits=c(0, max(df$y) * 1.1))
Приведенный пример немного нечетный, потому что это все значения 0 x. Для уточнения у вас есть значения ниже 0 и хотите, чтобы они были исключены из графика, или все значения больше 0, и вы хотите, чтобы минимальное значение графика (-ов) не превышало 0? –
@ Cotton.Rockwood Спасибо за помощь! Так что это немного сложно. У меня никогда не было значений меньше 0. В некоторых аспектах несколько значений равны 0, а остальные больше 0 (здесь автоматическая ось работает отлично). В других аспектах все значения равны нулю 0 (у меня возникают проблемы, поэтому я отправил пример с точками в ноль). –
Я вижу. Итак, где у вас есть все нули, чего вам нужны весы? В вашем примере оси - это то, как они из-за поведения по умолчанию в ggplot для расширения осей. Это справедливо для всех графиков. Вы можете настроить это, установив 'expand = c (0, 0)', но в этом случае это не поможет. Единственное решение, которое я вижу, - это явно установить пределы, основанные на том, все ли построенные значения равны 0. –