проблемы с ранжированными значениями и geom_bar - PullRequest
0 голосов
/ 17 января 2020

Я пытаюсь получить столбчатую диаграмму с накоплением, но (я думаю) проблема в том, что у меня ранжированные значения y:

Punkt Tiefe Zersetzungsgrad

JE1 000-050 H10
JE1 050-100 H10
JE1 100-150 H6
JE1 150-200 H6
JE1 200-250 H5
JE1 250-300 Sandmudde
JE1 300-350 Sandmudde
JE1 350-400 Organomudde
JE3 0-50    H10
JE3 50-100  H9
JE3 100-150 H9
JE3 150-200 H8
JE3 200-250 H6
JE3 250-300 H6
JE3 300-350 H6
JE3 350-400 H6
JE3 400-450 Sandmudde

Сейчас R просто складывает столбцы без приписывая это значениям в "Tiefe". Бары даже не высота, они должны быть. Кажется, R просто делает вещи случайно. Я думаю, что проблема заключается в значениях y, поскольку они являются диапазонами, а не единичными значениями. Я пробовал много разных вещей, искал по форумам и т.д. c., Но не понял, что делать.

Любая помощь будет признательна. Мой код:

zer <- read.table("HorizonteAmanda.csv", header = T, sep = ";", dec = ",", comment.char = "#", fileEncoding="UTF-8-BOM")[c(1:17),] 

plot <- ggplot(zer, aes(x = Punkt,y = Tiefe, color = Zersetzungsgrad)) 
plot + geom_bar(stat = "identity")

На рисунке показан сюжет, Rstudio дает мне

1 Ответ

1 голос
/ 17 января 2020

Попробуйте поиграться с этим конвейером:

  • Измените ваши данные, разделяя ваши "диапазоны" на две цифры c: ymin и ymax (см. Вызов separate(...) ниже );
  • Преобразовать Punkt var в factor и в numeric впоследствии (см. mutate(...) call ниже):
    • Вычислить xmin и xmax для модифицированных Punkt (pm .45);
  • Используйте geom_rect(...) вместо geom_bar(...) для построения графика:
    • Установите xmin и xmax прямоугольников;
    • Установите ymin и ymax (ваш диапазон глубины);
    • Заполните прямоугольники в соответствии со степенью разложения (вы могли бы подумать о другой палитре);
  • Перемаркируйте вашу ось x , чтобы избавиться от чисел и использовать уникальные значения из Punkt var;
  • Расширить пределы для оси y , чтобы охватить интервал от 0 до 500;
  • Реверс Ось Y , поэтому естественно, что поверхность pl anet выше, а более глубокие слои ниже;
  • Apply theme_few() from ggthemes библиотека, если вы хотите получить избавиться от уродливого серого фона по умолчанию et c.

Итак, одно из возможных решений:

library(tidyverse)
library(ggthemes)

dt %>%
  separate(col = Tiefe, into = c('ymin', 'ymax'), sep = '-', convert = T) %>%
  mutate(Punkt = as.numeric(as.factor(Punkt)))  %>%
  ggplot(
    aes(xmin = Punkt - .45, 
        xmax = Punkt + .45, 
        ymin = ymin, 
        ymax = ymax, 
        fill = Zersetzungsgrad
        )
    ) +
  geom_rect() +
  scale_x_continuous(breaks = 1:2, labels = unique(dt$Punkt)) +
  expand_limits(y = c(0, 500)) +
  scale_y_reverse(name = 'Tiefe') +
  ggthemes::theme_few()

deepness, darkness

Вероятно, это хорошая идея изменить Zersetzungsgrad var, например, добавить начальный ноль ко всем H*, чтобы изменить порядок на H05, H06, ..., H10.

Данные:

dt <- read.table(
  text = "
  Punkt Tiefe   Zersetzungsgrad
    JE1 000-050 H10
    JE1 050-100 H10
    JE1 100-150 H6
    JE1 150-200 H6
    JE1 200-250 H5
    JE1 250-300 Sandmudde
    JE1 300-350 Sandmudde
    JE1 350-400 Organomudde
    JE3 0-50    H10
    JE3 50-100  H9
    JE3 100-150 H9
    JE3 150-200 H8
    JE3 200-250 H6
    JE3 250-300 H6
    JE3 300-350 H6
    JE3 350-400 H6
    JE3 400-450 Sandmudde",
  header = T,
  stringsAsFactors = F
)
...