我正在尝试在刻面ggplot的一个面板上绘制一条水平线。如果你看一下附图,我希望它在底面,而不是顶部。我在两者中得到它,我无法再创造它。我的代码如下;如果它不是用于加载csv数据,它对于任何查看器都是完全可重现的。 ggplot创建位于代码的末尾,对geom_hline的调用是ggplot调用中的第二行。作为行参数源的数据框是在其上方的第j个,名为“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)
答案 0 :(得分:2)
在数据mdiLevel
中,如果希望将变量识别为分面变量,则必须使用相同的变量名称。使用Var
代替variable
。
mdiLevel = data.frame(Var='MDI', Z=0.5)