2017-04-27 9 views
0

bargraphs가 quaterly 데이터에 사용되고 라인이 전체 연도의 데이터가 될 것이므로 많은 점을 갖기 때문에 오류가 계속 발생합니다.geom_line을 사용하여 ggplot에있는 4 개의 막대 그래프에 대해 선을 그려 봅니다.

유일한 문제는 내가 처음 사용하는 geom_line 함수 때문입니다. 오류가 ->

scale_fill_manual에서 오류 (값 = C를 ("녹색", "노랑")) + geom_line (AES (X = DTS2 : 이진 연산자 아닌 숫자 인자

t="DG" 
fin=getFinancials(t, auto.assign = F) 
dts = labels(fin$BS$A)[[2]] 
dts2 = paste(substr(dts,1,7),"::",dts, sep="") 
stockprices = getSymbols(t, auto.assign = F) 
price = rep(0,NROW(dts)) 
for(i in 1:NROW(price)) 
{ 
    price[i]=as.vector(last(stockprices[dts2[i],6])) 
} 

yr= as.numeric(substr(dts,1,4)) 
pastyr = yr -2 
betayr = paste(pastyr,"::",yr,sep="") 

os = fin$BS$A["Total Common Shares Outstanding", ] 
gw= fin$BS$A["Goodwill, Net", ] 
ta= fin$BS$A["Total Assets", ] 
td= fin$BS$A["Total Debt", ] 
ni= fin$IS$A["Net Income", ] 
btax = fin$IS$A["Income Before Tax", ] 
atax = fin$IS$A["Income After Tax",] 

intpaid = fin$CF$A["Cash Interest Paid, Supplemental",] 
gw[is.na(gw)]=0 
intpaid[is.na(intpaid)]=0 
taa = (ta - gw)/os 

Rd = rep(0,NROW(dts)) 

for(i in 1:NROW(dts)) 
{ 
    if(td[i]!=0) 
    { 
    Rd[i] = intpaid[i]/td[i] 
    } 
} 


gspc = getSymbols("^GSPC", auto.assign = F) 
gs5 = getSymbols("GS5", src = "FRED", auto.assign = F) 

marketRisk = rep(0,NROW(dts)) 
riskFree = rep(0,NROW(dts)) 
beta = rep(0,NROW(dts)) 

for(i in 1:NROW(dts)) 
{ 
marketRisk[i]= mean(yearlyReturn(gspc[betayr[i]])) 
riskFree[i] = mean(gs5[betayr[i]]) 
gspc.weekly = weeklyReturn(gspc[betayr[i]]) 

stockprices.weekly = weeklyReturn(stockprices[betayr[i]]) 
beta[i] = CAPM.beta(stockprices.weekly,gspc.weekly) 
} 

Re = (riskFree/100) + beta * (marketRisk-(riskFree/100)) 

E = os*price 
V=E+td 
Tc = (btax - atax)/btax 
wacc = (E/V)*Re + (td/V)*Rd*(1-Tc) 
margin = (ni/wacc)/os - taa 

taadf = data.frame(dts,val = taa,cat="ta") 
margindf = data.frame(dts,val = margin ,cat="margin") 

mdf=rbind(margindf,taadf) 

#linrng = paste(dts[NROW(dts)],"::",dts[1],sep="") 

#dfdt = data.frame(stockprices[linrng,6]) 
#dfdt2 = data.frame(dt = labels(dfdt)[[1]],dfdt$AAPL.Adjusted,cat="taa") 
#names(dfdt2)=c("dt,price,cat") 
pricedf = data.frame(as.vector((stockprices[dts2[i],6]))) 
ggplot(mdf, aes(x=dts,y=val,fill=cat)) + geom_bar(stat="identity",color="black") 
    scale_fill_manual(values = c("green","yellow")) + 
    geom_line(aes(x=dts2, y=stockprices), stat = "identity", 
    position = "identity", na.rm = FALSE, show.legend = NA, 
    inherit.aes = TRUE) 
+0

이진수가 아닌 이진수는 'dts2'를 붙여 넣을 때 문자 변수가되고 줄 그래프에 막대 그래프의'dts '에 대한 x 축과 일치하는 숫자 값이있는 것으로 보입니다. 가능한 경우 숫자로 변환 해보십시오 (실제 데이터 또는 'str()'을 확실히 알 수는 없습니다). – sconfluentus

답변

0

주, 객체 stockpricesAn ‘xts’ object. 그래서이, 내가 코드를 보여 stockprices 개체의 주먹 변수를 들었다. ggplot 규모 내에서 사용할 수 없지만 다른 하나를 원하는 probabli.

library(dplyr) 
library(quantmod) 
library(PerformanceAnalytics) 
library(ggplot2) 

stockprices_df <- as.data.frame(stockprices) %>% 
    mutate(date = rownames(.)) %>% 
    filter(date %in% dts) 

ggplot() + 
    geom_col(
    data = mdf, 
    aes(x = dts,y = val,fill = cat) 
) + 
    geom_line(
    data = stockprices_df, 
    aes(x = date, y = DG.Open, group = 1) 
) + 
    scale_fill_manual(values = c("green","yellow")) 

[1]