tidyverse / ggplot2

An implementation of the Grammar of Graphics in R
https://ggplot2.tidyverse.org
Other
6.5k stars 2.02k forks source link

geom_area not working with negative values and two categories in 3.2.1 #3498

Closed Hillerst closed 4 years ago

Hillerst commented 5 years ago

I am using geom_area for stacked area chart showing cumulative results for categories. For some series the cumulative result turns negative from time to time and this have been working nicely with versions of ggplot2 until 3.2.0 was released. Some things have been fixed with the 3.2.1 release but I experince an issue when I have more than one category and using the category for the fill. I notice an ealier issue #3390 with similar problem but that has been closed now or ?

 packageVersion("ggplot2")
[1] ‘3.2.1’

# with one serie  (category A) it works as I expect

date <- as.Date(c("2019-07-31","2019-08-01","2019-08-02","2019-08-03"))
category <-rep(c("A"),4)
variable <-rep(c("cum_result"),4)
value <- c(0,2,3,-4)
data<- data.frame(date,category,variable,value)

ggplot(data, aes(x=date,y=value)) +
  geom_area(aes(x=date,y=value,fill=category),stat = "identity")

image

# addding a additional category B with values on the variable  shows the issue

date <- as.Date(c("2019-07-31","2019-07-31","2019-08-01","2019-08-01","2019-08-02","2019-08-02","2019-08-03","2019-08-03"))
category <-rep(c("A","B"),4)
variable <-rep(c("cum_result"),8)
value <- c(0,0,
           2,1,
           3,6,
           -4,3)

data<- data.frame(date,category,variable,value)

ggplot(data, aes(x=date,y=value)) +
  geom_area(aes(x=date,y=value,fill=category),stat = "identity")

image

ptoche commented 5 years ago

Support for this has been discontinued. See: https://github.com/tidyverse/ggplot2/issues/2802 and https://github.com/tidyverse/ggplot2/issues/2803

Hillerst commented 5 years ago

I don't think its the same problem as described in issues 2802 and 2803 I think the 3.2.0 version changed something in ordering of negative values. Using version 3.1.1 produces the following chart which is I think is correct.

library(ggplot2) packageVersion("ggplot2") [1] ‘3.1.1’

date <- as.Date(c("2019-07-31","2019-07-31","2019-08-01","2019-08-01","2019-08-02","2019-08-02","2019-08-03","2019-08-03")) category <-rep(c("A","B"),4) variable <-rep(c("cum_result"),8) value <- c(0,0, 2,1, 3,6, -4,3)

data<- data.frame(date,category,variable,value) ggplot(data, aes(x=date,y=value)) + geom_area(aes(x=date,y=value,fill=category),stat = "identity")

ggplot2 version 3 1 1

clauswilke commented 5 years ago

Yes, it is most likely caused by #3471.

thomasp85 commented 5 years ago

That one is obviously on me. We need some visual tests for these stacking situations

karawoo commented 4 years ago

@thomasp85 FYI https://github.com/tidyverse/ggplot2/pull/3401 looks like it solves this issue, but these stacking issues seem to be a whack-a-mole situation so I agree we need visual tests.

thomasp85 commented 4 years ago

Thanks! that will help with the debugging... srsly positions are the worst! seemingly simple and yet so so brittle

lock[bot] commented 4 years ago

This old issue has been automatically locked. If you believe you have found a related problem, please file a new issue (with reprex) and link to this issue. https://reprex.tidyverse.org/