簡體   English   中英

加熱 map 與 R 中的附加值

[英]Heat map with additional values in R

我為示例數據創建了一個熱量 map。 我想添加一些關於每小時平均值和一周中每一天總和的信息。 最好在圖表的右側增加一列,在頂部增加一行,無需填充。

在此處輸入圖像描述

我的代碼如下所示:

TD=data.frame(wday=rep(c("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", 
                         "Saturday"),24), hour=rep(0:23, each=7), N=sample(100:300, 168))

ggplot(TD, aes(hour, wday,  fill=N)) + 
  geom_tile(colour = "white", na.rm = TRUE) +
  theme_bw() + theme_minimal() + 
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank()) +
  scale_fill_viridis() +
  coord_fixed(xlim = c(0, 23)) +
  geom_text(aes(label=paste(N)), size=4) + 
  scale_x_continuous(breaks=seq(0, 23, 1)) 

對我來說最明顯的解決方案是將這些方法包含在您的 dataframe 中,然后在 plot 中包含您的熱圖。

library("ggplot2")
library("dplyr")
library("tidyr")
library("viridis")

TD=data.frame(wday=rep(c("Sunday", "Monday", "Tuesday", 
              "Wednesday", "Thursday", "Friday", "Saturday"),24),
              hour=rep(0:23, each=7), 
              N=sample(100:300, 168))

df <- TD %>% group_by(wday) %>% summarise(N=round(mean(N)), hour="avg") %>% rbind(TD)
df <- TD %>% group_by(hour) %>% summarise(N=round(mean(N)), wday="avg") %>% rbind(df)

df$wday <- factor(df$wday, levels=c("Monday", "Tuesday", "Wednesday", "Thursday",
                  "Friday", "Saturday", "Sunday", "avg"))
df$hour <- factor(df$hour, levels=c(as.character(0:23), "avg"))

ggplot(df, aes(hour, wday, fill=N)) + 
  geom_tile(colour="white", na.rm=TRUE) +
  theme_bw() + 
  theme_minimal() + 
  theme(panel.grid.major=element_blank(), panel.grid.minor=element_blank()) +
  scale_fill_viridis() +
  coord_fixed(xlim = c(0, 23)) +
  geom_text(aes(label=paste(N)), size=4) + 
  coord_fixed(xlim=c(0, 25), ratio=1)

在此處輸入圖像描述

編輯:不填寫新元素。

df <- TD %>% group_by(hour) %>% summarise(N=round(mean(N)), wday="avg") %>% rbind(TD)
df <- df %>% group_by(wday) %>% summarise(N=round(sum(N)), hour="sum") %>% rbind(df)

df$wday <- factor(df$wday, levels=c("Monday", "Tuesday", "Wednesday", "Thursday",
                                    "Friday", "Saturday", "Sunday", "avg"))
df$hour <- factor(df$hour, levels=c(as.character(0:23), "sum"))

ggplot() + 
  geom_tile(colour="white", data=subset(df, hour!="sum" & wday!="avg"), 
            aes(hour, wday, fill=N)) +
  geom_text(aes(hour, wday, label=N), data=df, inherit.aes=FALSE) +
  scale_x_discrete(limits=levels(df$hour)) +
  scale_y_discrete(limits=levels(df$wday)) +
  theme_bw() +  
  theme_minimal() + 
  theme(panel.grid.major=element_blank(), panel.grid.minor=element_blank(),
        axis.title=element_blank()) +
  scale_fill_viridis() +
  coord_fixed(xlim=c(0, 25), ratio=1)

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM