- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在用 ggplot2 绘制热图。 y 轴上的几个刻度需要标记。然而,它们中的一些过于接近和重叠。我知道ggrepel可以分离文本标签,但目前我还没有解决我的问题。
我的代码如下。欢迎任何建议。谢谢。
代码:
df <- data.frame()
for (i in 1:50){
tmp_df <- data.frame(cell=paste0("cell", i),
gene=paste0("gene", 1:100), exp = rnorm(100), ident = i %% 5)
df<-rbind(df, tmp_df)
}
labelRow=rep("", 100)
for (i in c(2, 5, 7, 11, 19, 23)){
labelRow[i] <- paste0("gene", i)
}
library(ggplot2)
heatmap <- ggplot(data = df, mapping = aes(x = cell, y = gene, fill = exp)) +
geom_tile() +
scale_fill_gradient2(name = "Expression") +
scale_y_discrete(position = "right", labels = labelRow) +
facet_grid(facets = ~ident,
drop = TRUE,
space = "free",
scales = "free", switch = "x") +
scale_x_discrete(expand = c(0, 0), drop = TRUE) +
theme(axis.line = element_blank(),
axis.ticks = element_blank(),
axis.title.y = element_blank(),
axis.text.y = element_text(),
axis.title.x = element_blank(),
axis.text.x = element_blank(),
strip.text.x = element_text(angle = -90))
heatmap
最佳答案
对于这些类型的问题,我更喜欢将轴绘制为单独的图,然后合并。它需要一些摆弄,但允许您绘制几乎任何您想要的轴。
在我的解决方案中,我使用了函数 get_legend()
, align_plots()
, 和 plot_grid()
来自牛图包。免责声明:我是包的作者。
library(ggplot2)
library(cowplot); theme_set(theme_gray()) # undo cowplot theme setting
library(ggrepel)
df<-data.frame()
for (i in 1:50){
tmp_df <- data.frame(cell=paste0("cell", i),
gene=paste0("gene", 1:100), exp=rnorm(100), ident=i%%5)
df<-rbind(df, tmp_df)
}
labelRow <- rep("", 100)
genes <- c(2, 5, 7, 11, 19, 23)
labelRow[genes] <- paste0("gene ", genes)
# make the heatmap plot
heatmap <- ggplot(data = df, mapping = aes(x = cell,y = gene, fill = exp)) +
geom_tile() +
scale_fill_gradient2(name = "Expression") +
scale_x_discrete(expand = c(0, 0), drop = TRUE) +
facet_grid(facets = ~ident,
drop = TRUE,
space = "free",
scales = "free", switch = "x") +
theme(axis.line = element_blank(),
axis.title = element_blank(),
axis.text = element_blank(),
axis.ticks = element_blank(),
strip.text.x = element_text(angle = -90),
legend.justification = "left",
plot.margin = margin(5.5, 0, 5.5, 5.5, "pt"))
# make the axis plot
axis <- ggplot(data.frame(y = 1:100,
gene = labelRow),
aes(x = 0, y = y, label = gene)) +
geom_text_repel(min.segment.length = grid::unit(0, "pt"),
color = "grey30", ## ggplot2 theme_grey() axis text
size = 0.8*11/.pt ## ggplot2 theme_grey() axis text
) +
scale_x_continuous(limits = c(0, 1), expand = c(0, 0),
breaks = NULL, labels = NULL, name = NULL) +
scale_y_continuous(limits = c(0.5, 100.5), expand = c(0, 0),
breaks = NULL, labels = NULL, name = NULL) +
theme(panel.background = element_blank(),
plot.margin = margin(0, 0, 0, 0, "pt"))
# align and combine
aligned <- align_plots(heatmap + theme(legend.position = "none"), axis, align = "h", axis = "tb")
aligned <- append(aligned, list(get_legend(heatmap)))
plot_grid(plotlist = aligned, nrow = 1, rel_widths = c(5, .5, .7))
关于r - 是否可以避免 ggrepel 轴标签重叠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47979653/
我想尽可能精确地在点上方绘制标签(无重叠),但 ggrepel 似乎坚持略微高于或低于绘制。例如 require(ggplot); require(ggrepel) ggplot(iris[1:10,
我正在尝试创建一个饼图来可视化 9 个属的丰度百分比。然而,标签都聚集在一起。我该如何补救?代码如下: generaabundance2020 % group_by(value) %>% # Va
我正在用 ggplot2 绘制热图。 y 轴上的几个刻度需要标记。然而,它们中的一些过于接近和重叠。我知道ggrepel可以分离文本标签,但目前我还没有解决我的问题。 我的代码如下。欢迎任何建议。谢谢
我正在尝试使用 geom_label_repel 将标签添加到图中的几个数据点。在这种情况下,它们恰好是箱形图上的异常值。我的大部分代码都在工作,我可以标记异常值,但由于某种原因,我得到了映射到该点的
我有一个相当密集的散点图,我正在使用 R 'ggplot2' 构建它,并且我想使用 'ggrepel' 来标记点的子集。我的问题是,我想绘制散点图中的所有点,但只用 ggrepel 标记一个子集,当我
想要绘制具有特定值的密度图(例如:中位数/均值/等)。我还想在绘图区域上方显示选定的值(例如中位数),因此它不会干扰分布本身。此外,在现实生活中,我有更大、更多样化的数据框(类别更多),所以我想分散标
我有一个 geom_gene_arrow 图,我需要使用 ggrepel 来防止标签重叠。不幸的是,我无法让它工作并得到错误提示“找不到函数“geom_text_repel”” 只有 geom_tex
我有一个 ggplot 图表,其中包含与此类似的数据: data 0), segment.alpha = .5, xlim = c(-5, 0), ylim = c(2.5, 5)) + ge
我试图在 geom_boxplot 中标记异常值使用 ggrepel::geom_label_repel .当只有一个分组变量时它工作得很好,但是当我尝试将它用于多个分组变量时,我遇到了问题。由于某种
我有一个数据集,其中每个数据点都有一个受约束的 x 值(代表一个定量变量的实际实例)、任意的 y 值(存在只是为了提供展开文本的维度)和一个标签.我的数据集可能非常大,并且经常存在文本重叠,即使我尝试
我正在使用最大方差旋转进行主成分分析,并希望显示看起来足够简单的图,但是我的加载向量在某些地方非常接近,并且它们的因子的标签往往会重叠。这就是 ggrepel 用来分隔标签的地方。我现在的困境是弄清楚
我尝试在 ggplot2 库中添加 ggrepel 来绘制图表: set.seed(42) ggplot(mtcars) + geom_point(aes(wt, mpg), size = 5,
ggrepel 提供了一系列出色的函数用于注释ggplot2 图形和the examples page包含许多关于如何扩展其功能的很好的提示,包括将生成的标签从绘图的轴、其他标签等移开。 但是,没有涉
我是一名优秀的程序员,十分优秀!