为什么我的多面图创建了 2 geom_hlines,传递的参数只创建了一个?

Why is my faceted plot creating 2 geom_hlines with parameters passed to create only one?

我正在尝试在多面 ggplot 的一个面板上绘制一条水平线。如果您查看所附图形,我希望它位于底部,而不是顶部。我在两者中都得到了它,但我无法重新创建它。我的代码如下;如果不是为了加载 csv 数据,它对于任何查看器来说都是完全可重现的。 ggplot 创建在代码末尾,对 geom_hline 的调用是 ggplot 调用中的第 2 行。作为线参数来源的数据框就在它上面,名为 'mdiLevel'。我希望在没有完全重现的情况下,某些事情会突然出现在某人身上。提前致谢...

require("tseries")
require("zoo")
require("reshape2")
require("ggplot2")
require("grid")

filePath = "Fakepath/MDI.csv"
data = read.csv(filePath, header=TRUE, stringsAsFactors=FALSE)
data$Date = as.Date(data$Date, format="%m/%d/%y")
data = zoo(data$M.D.I., data$Date)

startDate = index(data[1])
endDate = index(data[length(data)])

spy = get.hist.quote(instrument='SPY', start=startDate, end=endDate, quote="AdjClose", 
          provider = "yahoo", origin="1970-01-01", compression = "d", retclass="zoo")

allData = merge(data, spy)
allData = na.locf(allData)
allData = allData[index(allData) %in% index(data),]

names(allData) = c('MDI', 'SPY')
allData = allData[complete.cases(allData),]
allData = data.frame(index(allData), allData)
rownames(allData) = NULL
names(allData) = c('Date', 'MDI', 'SPY')

resh = melt(allData, id='Date')

resh2 = resh
names(resh2) = c('Date', 'Var', 'Val')
resh2$Var = factor(resh2$Var, levels=c('SPY', 'MDI'))

mdiLevel = data.frame(variable='MDI', Z=0.5)

pl = ggplot(resh2, aes(x=Date, y=Val, color=Var)) + geom_line(size=1) + facet_grid(Var ~ ., scales='free') +

     geom_hline(data=mdiLevel,aes(yintercept=Z), linetype='dashed', color='darkgreen') +

     theme(legend.position='none', plot.title = element_text(vjust = 2, size=rel(1.8), 
     face="bold"), axis.text.x=element_text(color='orangered4',size=rel(1.2)), 
     axis.text.y=element_text(color='orangered4',size=rel(1.2)), axis.title.x = element_blank(), 
     axis.title.y = element_blank(), strip.text.x = element_text(size=rel(1.2)),
     panel.margin=unit(2,"lines"), strip.text.y = element_text(size=rel(1.2))) +
     ggtitle("MDI and SPY") + scale_color_brewer(palette="Set1")

plot(pl)

在数据 mdiLevel 中,如果您希望变量被识别为构面变量,则必须使用相同的变量名称。使用 Var 而不是 variable

mdiLevel = data.frame(Var='MDI', Z=0.5)