Ошибка ggplot при использовании rmarkdown - объект «процент» не найден - PullRequest
0 голосов
/ 27 апреля 2020

Итак, я создавал эту диаграмму рассеяния с использованием ggplot в R. Используя этот код, как указано ниже в обычном скрипте r в RStudio, я могу создать нужный график без каких-либо ошибок.

Проблема в том, что я пытаюсь использовать один и тот же код в чанке, используя rmarkdown для вязки в PDF. Я получаю сообщение об ошибке: Ошибка в check_breaks_labels (разрывы, метки): объект percent не найден.

Есть предложения? Надеюсь, воспроизводимый пример в порядке.

library(tidyquant)
library(timetk)
library(ggplot2)

SPY <- tq_get("SPY", from = '2010-01-01',
                  to = "2020-04-04",
                  get = "stock.prices")

FXI <- tq_get("FXI", from = '2010-01-01',
              to = "2020-04-04",
              get = "stock.prices")

QQQ <- tq_get("QQQ", from = '2010-01-01',
              to = "2020-04-04",
              get = "stock.prices")


SPY_monthly_returns <- SPY %>%
  tq_transmute(select = adjusted,
               mutate_fun = periodReturn,
               period = "monthly",      
               col_rename = "SPY_ret")

FXI_monthly_returns <- FXI %>%
  tq_transmute(select = adjusted,
               mutate_fun = periodReturn,
               period = "monthly",      
               col_rename = "FXI_ret")

QQQ_monthly_returns <- QQQ %>%
  tq_transmute(select = adjusted,
               mutate_fun = periodReturn,
               period = "monthly",      
               col_rename = "QQQ_ret")

SPY_monthly_mean_ret <- SPY_monthly_returns %>%
  select(SPY_ret) %>%
  .[[1]] %>%
  mean(na.rm = TRUE)


FXI_monthly_mean_ret <- FXI_monthly_returns %>%
  select(FXI_ret) %>%
  .[[1]] %>%
  mean(na.rm = TRUE)


QQQ_monthly_mean_ret <- QQQ_monthly_returns %>%
  select(QQQ_ret) %>%
  .[[1]] %>%
  mean(na.rm = TRUE)

SPY_monthly_sd_ret <- SPY_monthly_returns %>%
  select(SPY_ret) %>%
  .[[1]] %>%
  sd()

FXI_monthly_sd_ret <- FXI_monthly_returns %>%
  select(FXI_ret) %>%
  .[[1]] %>%
  sd()

QQQ_monthly_sd_ret <- QQQ_monthly_returns %>%
  select(QQQ_ret) %>%
  .[[1]] %>%
  sd()



d <- data.frame(meanret = c(SPY_monthly_mean_ret,FXI_monthly_mean_ret,QQQ_monthly_mean_ret), sd = c(SPY_monthly_sd_ret,FXI_monthly_sd_ret,QQQ_monthly_sd_ret), names = c("SPY","FXI","QQQ"))

ggplot(d, aes(sd,meanret, color= ticker)) + 
geom_point(size=1) + geom_text(aes(label=names)) + 
ggtitle("Monthly Risk-Return Plot") + xlab("Volatility") +
ylab("Mean Return") + theme_bw() +
scale_y_continuous(label = percent, limits = c(0, 0.02)) +
scale_x_continuous(label = percent, limits = c(0, 0.08))

Ответы [ 2 ]

0 голосов
/ 27 апреля 2020

Решением было require(scales), и после этого укажите «тикер», поскольку я не сделал этого в своем фрагменте кода.

Оба были предложены очень быстро, что очень полезно для меня, который учится во время написания мой диплом бакалавра. Большое спасибо!

0 голосов
/ 27 апреля 2020

Вы забыли процитировать проценты.

ggplot(d, aes(sd,meanret, color= ticker)) + 
geom_point(size=1) + geom_text(aes(label=names)) + 
ggtitle("Monthly Risk-Return Plot") + xlab("Volatility") +
ylab("Mean Return") + theme_bw() +
scale_y_continuous(label = "percent", limits = c(0, 0.02)) +
scale_x_continuous(label = "percent", limits = c(0, 0.08))

Если не использовать кавычки, ggplot ищет объект с именем percent, который должен содержать строку. Из-за этого вы также можете сделать

p <- ggplot(...)
mylabel = "This is my label"
p + scale_x_continuous(label = "mylabel", limits = c(0, 0.08))
...