2017-04-27 132 views
0

我一直收到一個錯誤,因爲條形圖用於四位數據,並且該行將成爲整年的數據,所以它會有很多點。我想使用geom_line在ggplot中的四個條形圖上繪製一條線。

唯一的問題是我使用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。所以,你不能ggplot規模內使用,我挑stockprices對象的拳頭變量顯示代碼,但你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]