Проблемы с водопадом R ggplot2

#r #ggplot2 #graph #waterfall

#r #ggplot2 #График #водопад

Вопрос:

Привет, я получаю сообщение об ошибке

Ошибка: дискретное значение, переданное в непрерывную шкалу

когда я выполняю ниже. Следуя простому руководству по водопаду R наhttps://www.jigsawacademy.com/waterfall-charts-using-ggplot2-in-r /.

Интересно, устарело ли это, и я упускаю что-то простое.

 library(ggplot2)
library(dplyr)
balance <- data.frame(
  desc = c(
    "Starting Cash",
    "Sales",
    "Refunds",
    "Payouts",
    "Court Losses",
    "Court Wins",
    "Contracts",
    "End Cash"
  ),
  amount = c(2000,  3400, -1100, -100, -6600, 3800, 1400, 2800)
)
balance$desc <- factor(balance$desc, levels = balance$desc)
balance$id <- seq_along(balance$amount)
balance$type <- ifelse(balance$amount > 0, "in","out")
balance[balance$desc %in% c("Starting Cash", "End Cash"), "type"] <-
  "net"
balance$end <- cumsum(balance$amount)
balance$end <- c(head(balance$end, -1), 0)
balance$start <- c(0, head(balance$end, -1))
balance <- balance[, c(3, 1, 4, 6, 5, 2)]

ggplot(balance, aes(desc, fill = type, x = desc))   geom_rect(aes(
  xmin = id - 0.45,
  xmax = id   0.45,
  ymin = end,
  ymax = start
))


Rstudio version 1.3.1073
R - version 4.0.2
ggplot2 - version 3.3.2
  

Есть идеи?

Спасибо

Ответ №1:

Внося эти небольшие изменения в ваш код, я получил это:

 library(ggplot2)
library(dplyr)
#Data
balance <- data.frame(
  desc = c(
    "Starting Cash",
    "Sales",
    "Refunds",
    "Payouts",
    "Court Losses",
    "Court Wins",
    "Contracts",
    "End Cash"
  ),
  amount = c(2000,  3400, -1100, -100, -6600, 3800, 1400, 2800),
  stringsAsFactors = F
)
balance$desc <- factor(balance$desc, levels = balance$desc)
balance$id <- seq_along(balance$amount)
balance$type <- ifelse(balance$amount > 0, "in","out")
balance[balance$desc %in% c("Starting Cash", "End Cash"),"type"] <- "net"
balance$end <- cumsum(balance$amount)
balance$end <- c(head(balance$end, -1), 0)
balance$start <- c(0, head(balance$end, -1))
balance <- balance[, c(3, 1, 4, 6, 5, 2)]
#Plot
ggplot(balance, aes(desc, fill = type))   geom_rect(aes(
  x = desc,
  xmin = id - 0.45,
  xmax = id   0.45,
  ymin = end,
  ymax = start
))
  

Вывод:

введите описание изображения здесь

Я следовал указаниям на веб-странице, которую вы включили в свой вопрос.

Комментарии:

1. Спасибо за это. Как ни странно, при заводской установке R stringAsFactors по умолчанию используется значение False, которое должно заставить это работать.

2. @Sam, stringAsFactors значение по умолчанию изменилось с True на False, когда R перешел с версии 3.x на 4.x