Изменение меток даты с нечетных на четные годы - PullRequest
1 голос
/ 28 апреля 2020

Я хочу сделать, казалось бы, тривиальную корректировку для диаграммы, изображенной ниже:

Я бы хотел, чтобы метки вдоль оси x были четными годами, а не нечетными года. Поэтому вместо того, чтобы идти с 2009 -> 2011 -> 2013, они должны go с 2008 -> 2010 -> 2012 и так далее ...

Как мне go сделать это?

Вот код:

germany_yields <- read.csv(file = "Germany 10-Year Yield Weekly (2007-2020).csv", stringsAsFactors = F)
italy_yields <- read.csv(file = "Italy 10-Year Yield Weekly (2007-2020).csv", stringsAsFactors = F)

germany_yields <- germany_yields[, -(3:6)]
italy_yields <- italy_yields[, -(3:6)]

colnames(germany_yields)[1] <- "Date"
colnames(germany_yields)[2] <- "Germany.Yield"
colnames(italy_yields)[1] <- "Date"
colnames(italy_yields)[2] <- "Italy.Yield"

combined <- join(germany_yields, italy_yields, by = "Date")
combined <- na.omit(combined)
combined$Date <- as.Date(combined$Date,format = "%B %d, %Y")
combined["Spread"] <- combined$Italy.Yield - combined$Germany.Yield

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

ggplot(data=combined, aes(x = Date, y = Spread)) + geom_line() +

       scale_x_date(limits = fl_dates, 
                    expand = c(0, 0), 
                    date_breaks = "2 years",
                    date_labels = "%Y")

Ответы [ 2 ]

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

A - не очень элегантно - можно было бы поместить эти аргументы в ваши scale_x_date():

scale_x_date(date_labels = "%Y", 
             breaks = ymd(unique(year(combined$fl_dates)[year(combined$fl_dates)%%2 == 0]), truncated = 2L)

(мы определяем перерывы вручную, поднаправляя весь диапазон дат и сохраняя четность лет)

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

Это на самом деле довольно просто. Просто установите нижний предел на четное число и установите верхний предел на NA. Поскольку вы не предоставили воспроизводимый пример, здесь приведены некоторые поддельные данные.

library(tidyverse)

mydates <- seq(as.Date("2007/1/1"), by = "3 months", length.out =100)

df <- tibble(
  myvalue = rnorm(length(mydates))
)

# without limits argument

ggplot(df ) +
  aes(x = mydates, y = myvalue) +
  geom_line(size = 1L, colour = "#0c4c8a") +
  scale_x_date(date_breaks = "2 years",
               date_labels = "%Y")

# with limits argument 

ggplot(df ) +
  aes(x = mydates, y = myvalue) +
  geom_line(size = 1L, colour = "#0c4c8a") +
  scale_x_date(date_breaks = "2 years",
               date_labels = "%Y",
               limits = c(as.Date("2006/1/1"), NA))

Создано в 2020-04-29 пакетом Представлять (v0.3.0)

...