我对R和ggplot还是比较陌生,但是我已经发现我的绘图出现了一个常见问题
出于某种原因,ggplot通常决定不在y轴上显示顶部刻度线标签。我从随机的Google搜索中找到了以下图片,但它说明了我所指的问题:
如您从上表中看到的,其中一条线延伸到y轴顶部刻度线标签的上方。我觉得这很令人沮丧,ggplot做到这一点对我来说似乎很奇怪。我更希望图表中的所有数据都包含在最小和最大刻度标签内,而不是超出范围。
通常,这不是大问题,因为可以手动配置y轴标签。但是在这种情况下,我有两个方面,y轴上的比例设置为free_y
。因此,我不能只手动设置y轴刻度标签,因为它们的两个图都需要具有不同的值。这是情节:
理想情况下,在左侧图上,y轴的顶部刻度标签为40,在右侧图上为6。这将确保所有数据都包含在y轴的最小值和最大值内局限性,但是由于上述刻面引入的复杂性,这说起来容易做起来难。
我是否有可能在不完全修改代码的情况下达到预期的效果?
这里是我正在使用的CSV文件的链接:https://onedrive.live.com/?authkey=%21AEeTM7phVBNGI5c&id=ACB3DC15E10D8AF1%213433&cid=ACB3DC15E10D8AF1。不幸的是,通过OneDrive共享CSV时,它们会转换为excel文件。因此,您可能必须访问这些文件并将其导出为CSV,才能使以下代码起作用:
library(ggplot2)
library(scales)
library(extrafont)
library(dplyr)
library(tidyr)
# you may also need to adjust the working directory here:
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"))
ggplot(data=longcombined, aes(x = Date, y = value)) + geom_line() +
facet_wrap(~measure, scales = "free_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") +
scale_y_continuous(n.breaks = 7)
您是否尝试过@Uwe的答案:ggplot2 change axis limits for each individual facet panel?它不需要您编辑现有代码,只需添加facet_grid_sc
层。