Error: Discrete value supplied to continuous variable

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Error: Discrete value supplied to continuous variable

King, Barry
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]]

______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|

Re: Error: Discrete value supplied to continuous variable

jholtman
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 <[hidden email]> 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]]
>
> ______________________________________________
> [hidden email] 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.

______________________________________________
[hidden email] 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.