【问题标题】:I want to plot a line over four bargraphs of data in ggplot using geom_line.我想使用 geom_line 在 ggplot 中的四个数据条形图上绘制一条线。
【发布时间】:2017-04-27 02:08:59
【问题描述】:

我不断收到错误,因为条形图用于季度数据,并且该线将是全年的数据,因此它将有很多点。

唯一的问题是我刚开始使用的 geom_line 函数。错误是 -->

scale_fill_manual(values = c("green", "yellow")) + 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)

【问题讨论】:

  • 非数字到二进制表明当您粘贴 dts2 时,它变成了一个字符变量,并且线图似乎期望一个数值与 dts 的 x 轴匹配条形图。如果可能,尝试将其转换为数字(我看不到真实数据或str() 肯定知道)

标签: r ggplot2 quantmod r-car


【解决方案1】:

注意,对象stockpricesAn ‘xts’ object。所以,你不能在 ggplot 刻度内使用。我选择了stockprices 对象的第一个变量来显示代码,但您可能想要另一个。

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")) 

[

【讨论】:

    猜你喜欢
    • 2021-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-13
    • 1970-01-01
    • 2014-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多