R - geom_bar - позиция "стека" без суммирования значений

У меня есть этот фрейм данных

df <- data.frame(profile = rep(c(1,2), times = 1, each = 3), depth = c(100, 200, 300), value = 1:3)

Это мой сюжет

ggplot() + 
  geom_bar(data = df, aes(x = profile, y = - depth, fill = value), stat = "identity")

Моя проблема заключается в том, что метки y не соответствуют значениям глубины фрейма данных.

Чтобы помочь, мой желаемый сюжет выглядит так:

ggplot() + geom_point(data = df, aes(x = profile, y = depth, colour = value), size = 20) + xlim(c(0,3))

Но с полосой вместо точек, выровненных по вертикали

Примечание: я не хочу исправлять это вручную при изменении галочек с помощью scale_y_discrete(labels = (desired_labels))

Спасибо за помощь


person Loulou    schedule 14.02.2018    source источник
comment
Почему вы используете max по оси Y?   -  person amrrs    schedule 14.02.2018
comment
Правильный ! Это не обязательно. я отредактировал пост   -  person Loulou    schedule 14.02.2018
comment
Каков ваш ожидаемый выходной бар?   -  person amrrs    schedule 14.02.2018
comment
Мой ожидаемый выходной бар — это бар с тиками от 0 до -300.   -  person Loulou    schedule 14.02.2018
comment
Как это возможно, когда вы группируете свои данные с профилем, 1 будет иметь значение 600? что приводит к вопросу, что вы хотите в вашей оси X?   -  person amrrs    schedule 14.02.2018
comment
Я отредактировал свой пост, добавив сюжет, похожий на мой желаемый сюжет.   -  person Loulou    schedule 14.02.2018
comment
Это так, как я хочу. Последний шаг — укладка столбиков без суммирования глубины   -  person Loulou    schedule 14.02.2018
comment
Вы можете перестроить график, но сложно правильно установить group (чтобы наименьший столбец отображался сверху). ggplot(df, aes(x = factor(profile), y = -depth, fill = value, group = factor(interaction(profile, value), rev(interaction(profile, value))))) + geom_col(). Обратите внимание, что этот график неоднозначен в отношении того, что означают столбцы (истинные значения или суммы).   -  person Axeman    schedule 14.02.2018


Ответы (2)


Учитывая, что вам нужна ось Y от 0 до -300, использование facet_grid() кажется правильным вариантом без суммирования данных вместе.

ggplot() + geom_bar(data = df, aes(x = as.factor(profile), y = -depth, fill = value), stat = 'identity') + facet_grid(~ value)

введите здесь описание изображения

person amrrs    schedule 14.02.2018
comment
Чтобы помочь, мой желаемый график выглядит так: ggplot() + geom_point(data = df, aes(x = профиль, y = глубина, цвет = значение), size = 20) + xlim(c(0,3)) Но с полосой вместо точек, выровненных по вертикали - person Loulou; 14.02.2018
comment
Но помните, что тогда это будет иметь значение до 600 из-за общей суммы. Вы можете один, как это или боковые панели. - person amrrs; 14.02.2018

У меня есть это !

Спасибо за ваши ответы и на этот пост R, вычесть значение из предыдущей строки, сгруппировать по

Возобновить; данные:

df <- data.frame(profile = rep(c(1,2), times = 1, each = 3), depth = c(100, 200, 300), value = 1:3)

Затем мы вычисляем шаг глубины для каждого профиля:

df$diff <- ave(df$depth, df$profile, FUN=function(z) c(z[1], diff(z)))

И, наконец, сюжет:

ggplot(df, aes(x = factor(profile), y = -diff, fill = value)) + geom_col()
person Loulou    schedule 14.02.2018