[R] Error: Discrete value supplied to continuous variable

jim holtman jho|tm@n @end|ng |rom gm@||@com
Tue Dec 29 03:21:37 CET 2020


You setup your X & Y axis incorrectly.  in your call to ggplot you have:

g <-df %>%
  ggplot(aes(x=reorder(job,-span), y=span, fill=factor(job))) +

but in your call to geom_rect you are using a completely different set
of variables that is causing the error:

 geom_rect(aes(xmin = ID - w/2,
                xmax = ID + w/2,
                ymin = ymin,
                ymax = ymax,
                fill = factor(job)), alpha=0.25)

I changed the call to ggplot to at least have the same variables types
and got a plot out of it; is this what you were expecting:

  ggplot(aes(x=ID, y=ymin, fill=factor(job))) +



Jim Holtman
Data Munger Guru

What is the problem that you are trying to solve?
Tell me what you want to do, not how you want to do it.


Jim Holtman
Data Munger Guru

What is the problem that you are trying to solve?
Tell me what you want to do, not how you want to do it.


On Mon, Dec 28, 2020 at 4:33 PM King, Barry <king using butler.edu> wrote:
>
> I am attempting to convert an original schedule to longest operating time next schedule then create waterfall plot. I am having trouble with the plot. I get an Error: Discrete vale supplied to continuous variable message. My example code appears below.
>
> library(tidyverse)
> library(ggplot2)
>
> # original schedule of four jobs
> df <- data.frame(job=c("A","B","C","D"),
>                  original_begin=c("2021-01-05 07:00:00", "2021-05-01 08:30:00",
>                                  "2021-05-01 10:30:00", "2021-05-01 14:00:00"),
>                  original_end=c("2021-01-05 08:30:00", "2021-05-01 10:30:00",
>                                "2021-05-01 14:00:00", "2021-05-01 16:00:00"))
>
> # represent date/times as POSIXct objects
> df$original_begin <- as.POSIXct(df$original_begin)
> df$original_end <- as.POSIXct(df$original_end)
>
> # calculate span, length of time each job takes
> df$span <- as.numeric(difftime(df$original_end,df$original_begin))
>
> # sort by span descending
> df <- arrange(df,-span)
>
> # assign ID now that df is correcly sorted
> df$ID <- as.numeric(rownames(df))
>
> # calculate ymin and ymax
> df$ymin[1] <- min(df$original_begin)
> for (i in 1:(nrow(df)-1)) {
>   df$ymax[i] <- df$ymin[i] + df$span[i]
>   df$ymin[i+1] <- df$ymax[i]
> }
> df$ymax[nrow(df)] <- df$ymin[nrow(df)] +
>   df$span[nrow(df)]
>
> # following is loosely based on tutorial found at
> # https://www.stomperusa.com/2019/05/27/basic-waterfall-graphs-in-r/
>
> # set up plot canvas, longest job first (see x=reorder(job,-span))
> g <-df %>%
>   ggplot(aes(x=reorder(job,-span), y=span, fill=factor(job))) +
>   theme_classic() +
>   theme(legend.title=element_blank())+
>   theme(legend.position = "right", panel.grid = element_blank(),
>         axis.text.x = element_text(angle = 90, vjust = 0.5)) +
>   labs(y = "Hours", x = "Job")
> g  # seems to be working as expected through here
>
> w <- 0.5  # use to set width of bars
>
> # attempt to create waterfall plot
> g <- g +
>   geom_rect(aes(xmin = ID - w/2,
>                 xmax = ID + w/2,
>                 ymin = ymin,
>                 ymax = ymax,
>                 fill = factor(job)), alpha=0.25)
> g
>
> Any assistance is appreciated
>
>
> Sent from Mail<https://go.microsoft.com/fwlink/?LinkId=550986> for Windows 10
>
>
>         [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.



More information about the R-help mailing list