为什么我的刻面图创建2个geom_hlines参数传递给只创建一个?

时间:2015-01-15 20:29:34

标签: r ggplot2

我正在尝试在刻面ggplot的一个面板上绘制一条水平线。如果你看一下附图,我希望它在底面,而不是顶部。我在两者中得到它,我无法再创造它。我的代码如下;如果它不是用于加载csv数据,它对于任何查看器都是完全可重现的。 ggplot创建位于代码的末尾,对geom_hline的调用是ggplot调用中的第二行。作为行参数源的数据框是在其上方的第j个,名为“mdiLevel”。我希望有人跳出某个东西而不能完全重现。提前谢谢......

enter image description here

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)

1 个答案:

答案 0 :(得分:2)

在数据mdiLevel中,如果希望将变量识别为分面变量,则必须使用相同的变量名称。使用Var代替variable

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