更改 R 热图中的轴标签
Change axis labeling in R heatmap
我有一个热图绘制了一个包含 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
当我删除 "factor" 时,我得到了这个(轴是正确的但没有数据?):
添加
scale_x_continuous(n.breaks=10, limits=c(0,100))+
scale_y_continuous(n.breaks=10, limits=c(0,100))
到你的 ggplot。
将 labes=seq(1,100,10)
添加到两个比例函数以将标签文本修改为 0-100,步长为 10。
您的数据不完整,无法制作热图。 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")
它是否回答了您的问题?
我有一个热图绘制了一个包含 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
当我删除 "factor" 时,我得到了这个(轴是正确的但没有数据?):
添加
scale_x_continuous(n.breaks=10, limits=c(0,100))+
scale_y_continuous(n.breaks=10, limits=c(0,100))
到你的 ggplot。
将 labes=seq(1,100,10)
添加到两个比例函数以将标签文本修改为 0-100,步长为 10。
您的数据不完整,无法制作热图。 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")
它是否回答了您的问题?