R语言 你好,我有一个问题,当我试图创建热图,它只是不会显示

vhmi4jdf  于 2023-03-15  发布在  其他
关注(0)|答案(1)|浏览(142)

我试着用ggplot在R中创建热图,X轴是日期,Y轴是回报,我用quantmod导出了一个股票数据,计算了每日回报,这是我的代码:

library(quantmod)
library(zoo)
library(ggplot2)
library(dplyr)

test1=getSymbols("BTC-USD",auto.assign=F)
test2=dailyReturn(test1)
test2=test2%>%fortify.zoo()%>%mutate(dr=daily.returns*100)
fig1=ggplot(data=test2,aes(x=Index,y=dr,fill=dr))+geom_tile()

当我运行上面的代码时,它返回了一个如下所示的空图

现在,我期待的是这样的情节。

其中X轴是日期,Y轴是收益。Y轴应该从-1.5到1.5。有没有办法制作只有2个值(日期和收益)的热图?

atmip9wb

atmip9wb1#

我认为你离你的目标还很远:这里是一个起点:请注意,这些只是10天的数据,而您有超过3000天的数据!

library(quantmod)
library(zoo)
library(ggplot2)
library(dplyr)

test1=getSymbols("BTC-USD",auto.assign=F)
test2=dailyReturn(test1)
test3 <- test2%>%
    fortify.zoo()%>%
    mutate(dr=daily.returns*100)

test4 <- test3 %>% 
  slice(1:10) %>% 
  mutate(new = rep(1, 10))

  
  # Create plot
  ggplot(test4, aes(Index, new, fill = dr)) +
    geom_tile(color = "black", height = 1.6, width = 0.8) +
    scale_fill_gradient(low = "white", high = "red") +
    theme_void() +
    ylim(-2,2)+
    theme(axis.text.x = element_text(angle = 45, hjust = 1))+
    geom_text(aes(label = round(dr,1)), size = 3, color = "black")+
    scale_x_continuous(breaks = test4$Index, labels = format(test4$Index, "%Y-%m-%d"), 
                       expand = c(0.05, 0)) +
    theme(legend.position = "none",
          axis.ticks.x = element_blank(),
          axis.text.x = element_text(angle = 45, hjust = 1, vjust = 1),
          plot.margin = unit(c(8,0.5,1,1), "cm")) +
    ggtitle("dr by date")

相关问题