Skip to content

Error: Discrete value supplied to continuous variable

2 messages · King, Barry, jim holtman

#
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
#
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 at butler.edu> wrote: