당신은 단순히 유 말했듯이 geom_text
을 추가해야
library(quantmod)
getSymbols('AAPL')
getSymbols('FB')
AAPL = data.frame(AAPL)
FB = data.frame(FB)
p1 = ggplot(AAPL)+geom_line(data=AAPL,aes(as.Date(rownames(AAPL)),AAPL.Adjusted,color="AAPL"))
p2 = p1+geom_line(data=FB,aes(as.Date(rownames(FB)),FB.Adjusted,color="FB"))
p2 + xlab("Year") + ylab("Price")+theme_bw()+theme(legend.position="none") +
geom_text(aes(x = as.Date("2011-06-07"), y = 60, label = "AAPL", color = "AAPL")) +
geom_text(aes(x = as.Date("2014-10-01"), y = 45, label = "FB", color = "FB"))
수정
x
및 y
의 위치를 geom_text
에 자동으로 찾으려면 변수 개수를 늘리면 레이블이 겹치는 새로운 문제가 발생합니다. 다음은 x
와`Y
AAPL$date = rownames(AAPL)
AAPL$var1 = "AAPL"
names(AAPL)[grep("AAPL", names(AAPL))] = gsub("AAPL.", "", names(AAPL)[grep("AAPL", names(AAPL))])
FB$date = rownames(FB)
FB$var1 = "FB"
names(FB)[grep("FB", names(FB))] = gsub("FB.", "", names(FB)[grep("FB", names(FB))])
# bind the 2 data frames
df = rbind(AAPL, FB)
# where do you want the legend to appear
legend = data.frame(matrix(ncol = 3, nrow = length(unique(df$var1))))
colnames(legend) = c("x_pos" , "y_pos" , "label")
legend$label = unique(df$var1)
legend$x_pos = as.POSIXct(legend$x_pos)
df$date = as.POSIXct(df$date)
for (i in legend$label)
{
legend$x_pos[legend$label == i] <- as.POSIXct(min(df$date[df$var1 == i]) +
as.numeric(difftime(max(df$date[df$var1 == i]), min(df$date[df$var1 == i]), units = "sec"))/2)
legend$y_pos[legend$label == i] <- df$Adjusted[df$date > legend$x_pos[legend$label == i] & df$var1 == i][1]
}
# Plot
ggplot(df, aes(x = as.POSIXct(date), y = Adjusted, color = var1)) +
geom_line() + xlab("Year") + ylab("Price") +
geom_text(data = legend, aes(x = x_pos, y = y_pos, label = label, color = label, hjust = -1, vjust = 1))
+ guides(color = F)
bVa 제안 해 주셔서 감사합니다. 효과가있을 것입니다. 그러나 x, y 좌표를 지정하지 않고 선으로 텍스트를 인쇄하는 방법을 찾고 있습니다. 주식을 더 추가하거나 더 많은 차트를 생성하면 좌표를 찾고/추가하는 것이 약간 번거로워집니다. – user6296218
새로운 문제가 생길 것입니다 : 겹쳐지는 텍스트. 편집 된 답변을 참조하십시오. – bVa
다른 솔루션을 제안 해 주셔서 감사합니다. 귀하가 진술 한 바와 같이, 솔루션이 더 복잡해질 것이라는 데 동의합니다. 나는 그것을 간단하게하고 싶다. 도와 주셔서 감사합니다. – user6296218