【问题标题】:Heatmap rearrange columns热图重新排列列
【发布时间】:2020-05-21 08:57:58
【问题描述】:

我正在用 R 语言创建一个热图,并且是该语言的新手。尝试重新排序此热图上的 y 轴,以使每年出现次数最多的城市显示在顶部,而在底部显示最少,但会出现大量错误,即使我越过了它们也没有改变任何东西。我已经尝试了很多东西,所以认为这可能值得一问。

唯一相关的变量名:Month_numAustralian_City。这是我得到的:

# I've included my discarded ideas too, as comments
require(ggplot2)
require(dplyr)

add_count(flights, Australian_City)
ggplot(flights, aes(x=Month_num %>% reorder(count.Freq), y=Australian_City)) + geom_bin2d() + scale_x_discrete(labels=c("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec")) + labs(x="Month", y="Flights per city") + ggtitle("Monthly International Flights Per City")

#city_counts = flights %>% group_by(Australian_City) %>% count()
#ave(age, gender, FUN = length))
#flights %>% mutate(num_by_city=ave(Australian_City, FUN=length))
#flights$Australian_City <- flights$Australian_City %>% reorder(flights$n)
#flights <- transform(flights, count=table(Australian_City)[Australian_City])
#flights %>% mutate(num_by_city= case_when(city_counts$Australian_City==Australian_City ~ city_counts$n))
#flights %>% mutate(visit_count = sum(flights$))

我可以看到其中一个被丢弃的想法有效,但我不知道如何:(。Month_numAustralian_City 都是因子,但月份存储为整数112。任何帮助将不胜感激!

【问题讨论】:

    标签: r ggplot2 dplyr heatmap


    【解决方案1】:

    我试图重现你的情况。 创建数据集:

    require(ggplot2)
    require(dplyr)
    library(tidyr)
    
    Adelaide <- sample(1:300, 12, replace=TRUE)
    Darwin <- sample(1:300, 12, replace=TRUE)
    Calms <- sample(1:300, 12, replace=TRUE)
    Canberra <- sample(1:300, 12, replace=TRUE)
    Melbourne <- sample(1:300, 12, replace=TRUE)
    
    data <- data.frame(Adelaide, Darwin, Calms, Canberra, Melbourne)
    data$Month <- format(ISOdatetime(2000,1:12,1,0,0,0),"%b")
    
           Adelaide Darwin Calms Canberra Melbourne Month
    1        91    148    10      246        45   gen
    2       175    156   247      118         1   feb
    3       244    232    18      287        74   mar
    4       123      5    75      194       136   apr
    5       142    267    19      155        75   mag
    6       166    292   263      266       187   giu
    7        18     72    61       83       197   lug
    8       294     97    69       15         3   ago
    9       234    135    80        8       267   set
    10      181    134    54       64       203   ott
    11      232    197    50      145        39   nov
    12      177     20    68       32       299   dic
    

    然后收集它:

    data <- gather(data, "City","Count",1:5) # change 5 with your actual number of cities
    data$Month <- as.character(data$Month)
    data$Month <- factor(data$Month, levels=unique(data$Month))
    
    data$City <- as.character(data$City)
    data$City <- factor(data$City, levels=unique(data$City))
    
         Month   City   Count
    1    gen  Adelaide    91
    2    feb  Adelaide   175
    3    mar  Adelaide   244
    4    apr  Adelaide   123
    5    mag  Adelaide   142
    6    giu  Adelaide   166
    7    lug  Adelaide    18
    8    ago  Adelaide   294
    9    set  Adelaide   234
    10   ott  Adelaide   181
    11   nov  Adelaide   232
    12   dic  Adelaide   177
    13   gen    Darwin   148
    14   feb    Darwin   156
    15   mar    Darwin   232
    16   apr    Darwin     5
    17   mag    Darwin   267
    18   giu    Darwin   292
    ..   ...    .....    ...
    

    然后绘制热图(未排序):

    ggplot(data, aes(x= Month, y = City , fill= Count)) + geom_tile()
    

    最后,您可以按照每年出现次数最多的城市显示在顶部的方式排列行:

         Calms  Melbourne  Canberra    Darwin  Adelaide 
         1014      1526      1613      1755      2077 
    
    ggplot(data, aes(x= Month, y = reorder(City, Count) , fill= Count)) + geom_tile()
    

    【讨论】:

    • @LachShed 你解决问题了吗?
    猜你喜欢
    • 2019-09-11
    • 2021-04-17
    • 1970-01-01
    • 2021-10-09
    • 2019-09-18
    • 2015-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多