gpt4 book ai didi

r - 在 quantmod 中使用 chartSeries

转载 作者:行者123 更新时间:2023-12-04 20:50:05 25 4
gpt4 key购买 nike

我是 R 的新手,使用您的网站非常有帮助。
不幸的是,我已经为我的代码苦苦挣扎了两天,所以我想要
问几个问题。我一直在尝试创建漂亮的图表以放入
pdf 表,但我对我使用过的所有包裹都没有什么问题
使用。所以我想要完成的是创建一个包含三个的 pdf 表
图表和一张相关表。下面是我创建的一个例子,它是
与我想做的非常相似,但我想做的事情很少
改变。我在 quantmod 中使用 chartSeries 作为图形和表格
我正在使用文本图。

几个问题:

  • 右上角的日期可以去掉吗
    图表?
  • 而不是文本 Last xxxx(绿色系列文本)我想得到
    系列本身的名称,例如MSFT,这可行吗?
  • 我怎样才能给轴名称,例如归期?
  • 在累积差异图中,我使用的是 addVo() 和
    函数给出了这个漂亮的 barPlot。在其他图中我没有使用 addVo()
    只需添加TA和type='h',您就可以看到条形图/直方图的差异
    地块。是否可以使用 addTA 获得与 addVo 中相同的图?
  • 有没有办法更好地拟合相关表和/或更专业。也许另一个功能更好?

  • 最好的事物,

    OTB
    install.packages("quantmod")
    install.packages("gplots")
    library(quantmod)
    library(gplots)

    #setwd("..........")

    getSymbols("MSFT")
    getSymbols("AAPL")
    getSymbols("COKE")
    getSymbols("PEP")

    #Get the return
    MSFT.Return <- diff(MSFT)/lag(MSFT)
    AAPL.Return <- diff(AAPL)/lag(AAPL)
    COKE.Return <- diff(COKE)/lag(COKE)
    PEP.Return <- diff(PEP)/lag(PEP)

    #Get the return for last two months and only get close price return.
    #because in my data I only have the close price.
    MSFT.Close <- MSFT.Return['2012-06-01::2012-07-27', 'MSFT.Close']
    AAPL.Close <- AAPL.Return['2012-06-01::2012-07-27', 'AAPL.Close']
    COKE.Close <- COKE.Return['2012-06-01::2012-07-27', 'COKE.Close']
    PEP.Close <- PEP.Return['2012-06-01::2012-07-27', 'PEP.Close']

    pdf(sprintf("%s.pdf","ExampleGraph"), width=11.69, height=8.27)

    layout(matrix(1:8, nrow=4))

    #Get the difference in return
    techDifference <- MSFT.Close - AAPL.Close
    bevDifference <- COKE.Close - PEP.Close

    #Rename columns
    colnames(MSFT.Close)[1] <- "MSFT"
    colnames(AAPL.Close)[1] <- "AAPL"
    colnames(techDifference)[1] <- "Difference"

    colnames(COKE.Close)[1] <- "COKE"
    colnames(PEP.Close)[1] <- "PEP"
    colnames(bevDifference)[1] <- "Difference"

    #Combine into two tables
    tech <- cbind(MSFT.Close,AAPL.Close,techDifference)
    bev <- cbind(COKE.Close,PEP.Close,bevDifference)

    #Plot charts
    chartSeries(tech, order=1,up.col='green', name='MSFT & AAPL', layout=NULL,
    TA=c("addTA(tech,order=2,on=1,layout=NULL);
    addTA(tech$Difference,legend='Difference',type='h',layout=NULL)"))

    chartSeries(bev, order=1,up.col='green', name='COKE & PEP', layout=NULL,
    TA=c("addTA(bev,order=2,on=1,layout=NULL);
    addTA(bevDifference$Difference,legend='Difference',type='h',layout=NULL)"))

    #Take the cumulative difference for each sector
    techCumulative <- cumsum(abs(techDifference))
    bevCumulative <- cumsum(abs(bevDifference))
    diffCumulative <- techCumulative - bevCumulative

    #Rename columns
    colnames(techCumulative)[1] <- "Tech"
    colnames(bevCumulative)[1] <- "Beverage"
    #If I set the name as Volume, I can use addVo() and get nice barplot.
    #Problem with that is the legend name will be Volume but I would like to
    #have it Difference and of course I'm using wrong column name.
    colnames(diffCumulative)[1] <- "Volume"

    #Combine into one table
    cumulative <- cbind(techCumulative,bevCumulative,diffCumulative)

    #Plot chart
    chartSeries(cumulative,order=1,up.col='green', name='Cumulative Difference', layout=NULL,
    TA=c("addTA(cumulative,order=2,on=1,layout=NULL)", addVo()))

    #Get the correlation matrix
    correlationTable <- cbind(tech[,1:2],bev[,1:2])
    correlation <- cor(correlationTable)
    corTable <- as.table(correlation)
    corrFormatted <- formatC(corTable, format = "f", digits = 3)
    textplot(corrFormatted,valign="top",col.data=colors()[300],
    col.rownames=colors()[300],col.colnames=colors()[300])
    title("Correlation",cex.main=2.5,col.main=colors()[300])

    dev.off()

    最佳答案

    一些好问题。

    Q1:否。quantmod:::chartSeries.chob有这个代码:

    old.adj <- par('adj')
    par('adj'=0)
    do.call('title',list(x@name, col.main=x@colors$fg.col))
    par('adj'=1)
    do.call('title',list(paste('[',start(xx),'/',end(xx),']', sep='')
    ,col.main=x@colors$main.col))
    par('adj'=old.adj)

    IE。 start(xx)/end(xx) 位是硬编码的。

    Q2。同样,它似乎是硬编码的(相同的功能):
    if(x@type=='line') {
    lines(x.pos,Closes,col=x@colors$up.col,type=x@line.type)
    main.key <- c(list(list(legend=
    paste('Last',last(Closes)),
    text.col=x@colors$up.col)),main.key)
    }

    (我在研究源代码时找不到任何有助于 Q3/Q4/Q5 的东西,抱歉)

    关于r - 在 quantmod 中使用 chartSeries,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11715431/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com