【问题标题】:Change axis labeling in R heatmap更改 R 热图中的轴标签
【发布时间】:2020-04-01 23:55:47
【问题描述】:

我有一个热图,它绘制了一个包含 3 列和 100 行的数据框。 X 和 Y 轴代表 X 和 Y 坐标。当我创建地图时,它会显示每个位置并且变得不可读。

两个轴的范围都是 0-100。我希望两个轴都只是去 0,10,20,30,40,50,60,70,80,90,100。谁能帮我清理一下?谢谢。

ggplot( data = CombinedDF, mapping = aes( x = factor(allPoints.xLocs), y = factor(allPoints.yLocs) ) ) + 
  geom_tile( aes( fill = sum_patch ),  colour = "white") + labs( x = "X-Coordinate", y = "Y-Coordinate") +
  theme_bw() + theme(axis.text.x = element_text(angle = 45, hjust = 1))


Here is the sample of the input dataframe "CombinedDF"

  allPoints.xLocs allPoints.yLocs sum_patch
1   74.106128071    62.2365805  13
2   70.786698116    58.8928561  13
3   65.543694422    33.8426416  3
4   8.647094783     50.1071865  2
5   95.822909172    11.3294181  4
6   91.324434988    42.4157078  5
7   96.444815141    68.6108005  13
8   13.105758978    83.1488258  7
9   92.958515161    74.3948395  13
10  76.149455458    98.8090307  4

当我删除“因素”时,我得到了这个(轴正确但没有数据?):

【问题讨论】:

  • 删除“因素”到你的aes
  • 请提供您的数据集的可重现示例,以便人们为您提供帮助。请参阅本指南:stackoverflow.com/questions/5963269/…
  • 谢谢@dc37。我提供了一个例子。

标签: r ggplot2 rstudio heatmap


【解决方案1】:

您的数据不完整,无法制作热图。 X 和 Y 的每个组合都没有一个值。

在这里,我通过以下方式重现您的示例:

DF <- data.frame(X = runif(100,0,100),
                 Y = runif(100,0,100),
                 sum = sample(0:30,100, replace =TRUE))

您可以将它们绘制为点:

ggplot(DF,aes(x = X, y = Y, color= sum))+
  geom_point()

如果您想制作热图,另一种可能性是创建一些组间隔(0-10 / 10-20 / ...)。您可以使用cut 函数来做到这一点:

library(dplyr)

DF <- DF %>% mutate(CutX = cut(X,seq(0,100, by = 10)),
              CutY = cut(Y,seq(0,100, by = 10)))

         X          Y sum     CutX    CutY
1 19.48048 79.1970915  17  (10,20] (70,80]
2 42.47574 34.1226793  10  (40,50] (30,40]
3 43.99754 25.7454872   7  (40,50] (20,30]
4 90.88465  0.3961523  18 (90,100]  (0,10]
5 46.26645 38.0338865  25  (40,50] (30,40]
6 93.15978 59.9426569  15 (90,100] (50,60]

然后,您需要为 X 和 Y 的每个组合扩展此数据框:

Expand_DF <- expand.grid(CutX = unique(DF$CutX), CutY = unique(DF$CutY))
Expand_DF$Sum <-NA

      CutX    CutY Sum
1  (10,20] (70,80]  NA
2  (40,50] (70,80]  NA
3 (90,100] (70,80]  NA
4  (30,40] (70,80]  NA
5  (80,90] (70,80]  NA
6  (70,80] (70,80]  NA

最后,您可以将它们绑定在一起,如果多个值在同一区间内,您可以计算平均值并最终将它们绘制在 ggplot 中:

library(dplyr)
library(ggplot2)

DF %>% bind_rows(.,Expand_DF) %>% 
  group_by(CutX, CutY) %>%
  summarise(Sum = mean(sum,na.rm = TRUE)) %>%
  ggplot(aes(x = CutX, y = CutY, fill = Sum))+
  geom_tile(color = "black")+
  scale_fill_gradient(na.value = "white")

它回答了你的问题吗?

【讨论】:

  • 谢谢@dc37!
  • 不客气;)。不确定它是否让您完全满意,但很高兴它可以帮助您解决问题。
【解决方案2】:

添加

scale_x_continuous(n.breaks=10, limits=c(0,100))+

scale_y_continuous(n.breaks=10, limits=c(0,100))

到你的 ggplot。

More info here

在两个缩放函数中添加labes=seq(1,100,10),以将标签文本修改为0-100,步长为10。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-25
    • 1970-01-01
    • 2020-12-26
    • 2017-05-22
    • 1970-01-01
    • 1970-01-01
    • 2016-09-26
    • 1970-01-01
    相关资源
    最近更新 更多