![](/img/trans.png)
[英]R Heatmap: conditionally change label text colours with (ggplot2 or plotly)
[英]Summing Columns conditionally prior to use in HeatMap GGPLOT2 in R?
我正在R中使用ggplot2從R中的大約7000個條目的數據集中在R中創建HeatMap,但是由於我的圖例說明了我知道單個實例具有的“ Vol”值,因此我對結果不滿意,並且我想繪制月日/周日組合的總體積。
因此,我的新手假設是ggplot2不會自動匯總值,或者在繪制之前缺少某些內容。
基本上,我希望在繪圖時或之前對所有217個單元格執行與Excel中類似的操作。
=SUMIFS(C2:C9999,D2:D9999,"1",F2:F9999,"Wed")
例如,Excel在一個月的第三個星期三的第一天將其表示為每月的第一個星期四的“ 6098822”和“ 6756753”; 大於下面的HeatMap的最大密度。
很可能我只是缺少一個基本的聚合函數來生成正確的聚合組合。
有人可以指出我應該做的事情,並在下面准確解釋GGPLOT2在做什么,例如使用它為情節找到的第一個組合嗎?
注意:DoY-> 1,365 DofM-> 1-31 DofW-> Sun-Sat
我的數據如下所示:
> head(AC3,10)
DD Date Vol DofM DoY DofW
1 1 01/01/97 28857 1 1 Wed
2 2 01/02/97 37757 2 2 Thu
3 3 01/03/97 41394 3 3 Fri
4 4 01/04/97 39614 4 4 Sat
5 5 01/05/97 32735 5 5 Sun
6 6 01/06/97 33536 6 6 Mon
7 7 01/07/97 33547 7 7 Tue
8 8 01/08/97 34205 8 8 Wed
9 9 01/09/97 35804 9 9 Thu
10 10 01/10/97 42895 10 10 Fri
>p<-ggplot(AC3,aes(DofM,DofW))
>p + geom_tile(aes(fill=Vol)) + scale_fill_gradient(low="white", high="darkblue") + xlab("Day of Month") + ylab("Day of Week")
產生圖:
您可以通過ggplot
數據來測試ggplot
的功能,從而輕松確定ggplot
的處理方式。
例如,以下是用於創建數據集的R代碼,該數據集的前四行重復了前四行。 但是, Vol
值在重復的底部4行上為負。 運行此命令以查看:
# take in data similar to what was show in question
AC3<-scan(what=list(id=0,DD=0,Date="",Vol=0,DofM=0,DoY=0,DofW=""))
1 1 01/01/97 28857 1 1 Wed
2 2 01/02/97 37757 2 2 Thu
3 3 01/03/97 41394 3 3 Fri
4 4 01/04/97 39614 4 4 Sat
5 5 01/01/97 -8857 1 1 Wed
6 6 01/02/97 -7757 2 2 Thu
7 7 01/03/97 -1394 3 3 Fri
8 8 01/04/97 -9614 4 4 Sat
#turn into data.frame for ggplot
AC3<-as.data.frame(AC3)
# do the plottin'
require(ggplot2)
ggp2 <- ggplot(AC3,aes(DofM,DofW))
ggp2 <- ggp2 + geom_tile(aes(fill=Vol))
ggp2 <- ggp2 + scale_fill_gradient(low="white",high="darkblue")
ggp2 <- ggp2 + xlab("Day of Month")
ggp2 <- ggp2 + ylab("Day of Week")
print(ggp2)
您可以看到ggplot僅使用組合DofM,DofW
的最后一個Vol
值。 現在開始您真正想要做的事情,總結DofM,DofW
組合的重復Vol
值。 我選擇的武器是R
庫sqldf
(SQL數據框架)。 這是在R中使用SQL的一種方式。
# need to install sqldf: install.packages("sqldf",dep=TRUE)
require(sqldf)
# sql query to add all Vol values for unique DofM, DofW combinations
AC4<-sqldf(paste("select DofM, DofW, sum(Vol) as newvol"
,"from AC3"
,"group by DofM, DofW"
))
# see if you agree with the output:
print(AC4)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.