2016-01-21 4 views
3

Я пытаюсь реплицировать верхний нижний участок, как пример here, но он не отображается правильно (пурпурная серия имеет + ve и -ve значения, а зеленый отрицательный), оставляя грязные артефакты , Я также изо всех сил, чтобы создать пример игрушку, которая повторяет вопрос, так что я надеюсь, что кто-то может помочь, несмотря на мое отсутствие данныхggplot2 положительный/отрицательный сюжет не рендеринга чисто

мой код:

negatives <- result[result$value < 0,] 
positives <- result[result$value >= 0,] 

ggplot() + 
    geom_area(data = negatives, aes(x = datetime, y = value, fill=variable)) + 
    geom_area(data = positives, aes(x = datetime, y = value, fill=variable)) 

Структура моих данных:

dput(droplevels(head(result))) 

structure(
list(
    datetime = structure(c(1421751900, 1421751900, 1421752200, 1421752200, 1421752500, 1421752500), class = c("POSIXct", "POSIXt"), tzone = ""), 
    variable = structure(c(1L, 2L, 1L, 2L, 1L, 2L), .Label = c("V-S-MNSP1", "VIC1-NSW1"), class = "factor"), 
    value = c(9, 80.106180098, 9, 77.719632578, 9, 84.158868934) 
), 
.Names = c("datetime", "variable", "value"), 
row.names = c(NA, 6L), 
class = "data.frame") 

top/bottom plot

+1

Можете ли вы сделать это воспроизводимая? Может быть, имитировать некоторые данные образца? – Gregor

+0

Привет @Gregor, не жаль, что это моя проблема - это происходит только с моим реальным набором данных. Все мои попытки до сих пор воспроизводить данные с игрушками не удались ... – user2981639

+0

Я не уверен, как вы ожидаете, что кто-нибудь поможет вам в этом случае ... Вы также можете поделиться наименьшим образцом своих данных, вы можете найти, что иллюстрирует проблему. – Gregor

ответ

0

Я понял вопрос, мои точки данных могут быть положительными или отрицательными. Похоже, что стекирование не работает, если у меня нет значения для каждой переменной для каждого datetime. Так что вместо того, чтобы делать это

negatives <- result[result$value < 0,] 
positives <- result[result$value >= 0,] 

Я делаю это

result$positive <- ifelse(result$value >= 0,result$value,0) 
result$negative <- ifelse(result$value < 0,result$value,0) 

ggplot(data = result) + 
    geom_area(aes(x = datetime, y = positive, fill=variable), position = 'stack') + 
    geom_area(aes(x = datetime, y = negative, fill=variable), position = 'stack') 

И мой график, то правильно делает

Dave

Смежные вопросы