为什么我的多面图创建了 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)
我正在尝试在多面 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)