Проблемы с производством разных масштабов на график с помощью facet_grid_sc - PullRequest
0 голосов
/ 30 апреля 2020

Мне нужна помощь в создании разных масштабов для каждого граненого графика для любого, кто знаком с facet_grid_sc. Я следовал приведенному здесь примеру: https://github.com/zeehio/facetscales, но, к сожалению, мне не удалось воспроизвести результат на моих собственных данных.

Вот краткий обзор набора данных, который Я использую:

            Date Germany.Yield Italy.Yield Greece.Yield                measure value
    1 2020-04-19        -0.472       1.820        2.287 Italy_v_Germany.Spread 2.292
    2 2020-04-12        -0.472       1.790        2.112 Italy_v_Germany.Spread 2.262
    3 2020-04-05        -0.345       1.599        1.829 Italy_v_Germany.Spread 1.944
 ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
 1381 2007-02-11         4.048       4.267        4.302 Greece_v_Germany.Spread 0.254
 1382 2007-02-04         4.049       4.243        4.343 Greece_v_Germany.Spread 0.294
 1383 2007-01-28         4.094       4.303        4.325 Greece_v_Germany.Spread 0.231

Следующий код выдает ошибку: «Неверный ввод: date_trans работает только с объектами класса Date». Я абсолютно не знаю, что является причиной этой ошибки, так как мне кажется, что я правильно реализовал facet_grid_sc.

library(ggplot2)
library(scales)
library(extrafont)
library(dplyr)
library(tidyr)
library(facetscales)

work_dir <- "D:\\OneDrive\\Documents\\Economic Data\\Historical Yields\\Eurozone"
setwd(work_dir)

germany_yields <- read.csv(file = "Germany 10-Year Yield Weekly (2007-2020).csv", stringsAsFactors = F)
germany_yields <- germany_yields[, -(3:6)]
colnames(germany_yields)[1] <- "Date"
colnames(germany_yields)[2] <- "Germany.Yield"

italy_yields <- read.csv(file = "Italy 10-Year Yield Weekly (2007-2020).csv", stringsAsFactors = F)
italy_yields <- italy_yields[, -(3:6)]
colnames(italy_yields)[1] <- "Date"
colnames(italy_yields)[2] <- "Italy.Yield"

greece_yields <- read.csv(file = "Greece 10-Year Yield Weekly (2007-2020).csv", stringsAsFactors = F)
greece_yields <- greece_yields[, -(3:6)]
colnames(greece_yields)[1] <- "Date"
colnames(greece_yields)[2] <- "Greece.Yield"

combined <- merge(merge(germany_yields, italy_yields, by = "Date", sort = F), 
                  greece_yields, by = "Date", sort = F)

combined <- na.omit(combined)
combined$Date <- as.Date(combined$Date,format = "%B %d, %Y")
combined["Italy_v_Germany.Spread"] <- combined$Italy.Yield - combined$Germany.Yield
combined["Greece_v_Germany.Spread"] <- combined$Greece.Yield - combined$Germany.Yield

fl_dates <- c(tail(combined$Date, n=1), head(combined$Date, n=1))

longcombined <- gather(combined, 
                       key="measure", 
                       value="value", 
                       c("Italy_v_Germany.Spread",
                         "Greece_v_Germany.Spread"))

scales_y <- list(Italy_v_Germany.Spread = scale_y_continuous(),
                 Greece_v_Germany.Spread = scale_y_continuous())

ggplot(data=longcombined, aes(x = Date, y = value)) + geom_line() +

       facet_grid_sc(rows = vars(measure), scales = list(y = scales_y)) +

       geom_blank(aes(y = 0)) +

       scale_x_date(limits = fl_dates,
                    breaks = seq(as.Date("2008-01-01"), as.Date("2020-01-01"), by="2 years"),
                    expand = c(0, 0),
                    date_labels = "%Y") 

Если вы хотите воспроизвести пример, вот файлы CSV, которые я использую: https://onedrive.live.com/?authkey=%21AEeTM7phVBNGI5c&id=ACB3DC15E10D8AF1%213433&cid=ACB3DC15E10D8AF.

Спасибо за чтение.

1 Ответ

1 голос
/ 30 апреля 2020

Да, я немного знаком, я PR отредактировал фрагмент кода, который позволял преобразовывать масштаб. Проблема заключается в столбце даты, как обсуждено здесь . Вкратце, scales::date_trans является преобразователем по умолчанию для позиций даты. То, что этот преобразователь делает, а многие другие (например, scales::log10_trans()) этого не делают, - это то, что он преобразует класс между датой и цифрой c.

С точки зрения исправления, я думаю, что это может быть возможно, но я не знаю много о классах даты. В какой-то момент у меня будет go.

...