- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
ggrepel
提供了一系列出色的函数用于注释ggplot2
图形和the examples page包含许多关于如何扩展其功能的很好的提示,包括将生成的标签从绘图的轴、其他标签等移开。
但是,没有涉及的一件事是使用 geom_hline()
和 geom_vline()
将标签从手动绘制的线条上移开,这可能会发生,例如, 在 making an annotated volcano plot .
这里有一个简单的 MWE 来突出问题:
library("tidyverse")
library("ggrepel")
dat <- subset(mtcars, wt > 2.75 & wt < 3.45)
dat$car <- rownames(dat)
ggplot(dat, aes(wt, mpg, label = car)) +
geom_point(color = "red") +
geom_text_repel(seed = 1) + #Seed for reproducibility
geom_vline(xintercept = 3.216) + #Deliberately chosen "bad" numbers
geom_hline(yintercept = 19.64) + theme_bw()
注意线条如何与标签的文本重叠并使其模糊(是“Horret 4 Drive”还是“Hornet 4 Drive”?)
事后稍微调整一下要点,您可以做出更好的拟合——我只是稍微移动了一些标签以使它们脱线。
是否可以让 ggrepel
自动执行此操作?我知道给出的示例并不完全稳定(其他种子给出可接受的结果),但对于具有大量点的复杂图,这绝对是一个问题。
编辑:如果您很好奇,下面是一个“最小”的工作示例(取自 bioconductor):
download.file("https://raw.githubusercontent.com/biocorecrg/CRG_RIntroduction/master/de_df_for_volcano.rds", "de_df_for_volcano.rds", method="curl")
tmp <- readRDS("de_df_for_volcano.rds")
de <- tmp[complete.cases(tmp), ]
de$diffexpressed <- "NO"
# if log2Foldchange > 0.6 and pvalue < 0.05, set as "UP"
de$diffexpressed[de$log2FoldChange > 0.6 & de$pvalue < 0.05] <- "UP"
# if log2Foldchange < -0.6 and pvalue < 0.05, set as "DOWN"
de$diffexpressed[de$log2FoldChange < -0.6 & de$pvalue < 0.05] <- "DOWN"
# Create a new column "delabel" to de, that will contain the name of genes differentially expressed (NA in case they are not)
de$delabel <- NA
de$delabel[de$diffexpressed != "NO"] <- de$gene_symbol[de$diffexpressed != "NO"]
#Actually do plot
ggplot(data=de, aes(x=log2FoldChange, y=-log10(pvalue), col=diffexpressed, label=delabel)) +
geom_point() +
theme_minimal() +
geom_text_repel() +
scale_color_manual(values=c("blue", "black", "red")) +
geom_vline(xintercept=c(-0.6, 0.6), col="red") +
geom_hline(yintercept=-log10(0.05), col="red")
这会产生以下内容,其中文本重叠线问题非常明显:
最佳答案
我认为没有内置的方法可以做到这一点。
我头顶上的一个不优雅的技巧是沿着截线添加不可见的点,然后标签将远离这些点。
dat <- subset(mtcars, wt > 2.75 & wt < 3.45)
dat$car <- rownames(dat)
xintercept = 3.216
yintercept = 19.64
dat %>%
mutate(alpha = 1) %>%
bind_rows(.,
tibble(wt = seq(from = min(.$wt), to = max(.$wt), length.out = 20), mpg = yintercept, car = '', alpha = 0),
tibble(wt = xintercept, mpg = seq(from = min(.$mpg), to = max(.$mpg), length.out = 20), car = '', alpha = 0)
) %>%
ggplot(aes(wt, mpg, label = car, alpha = alpha)) +
geom_point(color = "red") +
geom_text_repel(seed = 1) + #Seed for reproducibility
geom_vline(xintercept = xintercept) +
geom_hline(yintercept = yintercept) + theme_bw() +
scale_alpha_identity()
关于r - 将 ggrepel/geom_text_repel 的标签从 geom_vline() 和 geom_hline() 绘制的线移开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71858631/
我有一个使用 ggplot2 库的条形图: plot <- qplot(Date, data=cns, geom="bar", binwidth = 1,
我想在 ggplot 中使用 geom_hline 包含两条水平线。我的图表上的比例从 0 到 20,000,我希望在 400 和 17,000 处有一条线。 ?geom_hline给出单行( geo
我有一个用 ggplot (ggplot + geom_bar) 创建的直方图,我在其中添加了一行,如下所示: + geom_hline(aes(yintercept = 0.05), linetyp
我想在表示虚线的现有图例下添加一个图例,以便将虚线标记为“avg tx effect”并置于研究 3 之下。 library(ggplot2) library(ggthemes) #dput(df)
我的 ggplot 有以下代码 - facet_wrap 函数在页面上为每个 Name 绘制 20 个图,沿 x 轴有 5 个 Pcode。我想计算每个名称的平均 TE.Contr 并将该值绘制为每个
这个问题在这里已经有了答案: Display a summary line per facet rather than overall (1 个回答) 2年前关闭。 library(tidyverse
我环顾四周,但似乎找不到解决方案。我在 ggplot2 中使用了 geom_point 和 geom_hline 并且都得到了令人满意的图例。但是,我在图中有一条黑线和一条蓝线,但在图例中它们都是黑色
使用下面的数据,请注意图例没有正确描述 geom_hline: df<-data.frame( points=c(.153,.144,.126,.035, .037, .039, .010,.
geom_hline 似乎忽略了美观,我错过了什么还是这是一个错误? df session 信息: R version 3.4.4 (2018-03-15) Platform: x86_64-pc-
在下面的代码中,我创建了一个 ggplot,p1,使用来自 df1 的数据。我想在 df2 中的每个项目的 score 值处添加一条水平线,并使用包含在列 中的每个项目的相应十六进制代码为每行着色it
我正在尝试制作带有“时间标记”的图形。这些时间标记是某些日期的垂直线。时间数据为POSIXct格式。我想使用Plotly的出色交互界面,并在其中使用ggplot对象。 问题在于,使用ggplotly(
我有一个箱线图,想为每个箱线图单独添加带有 geom_hline 的简单水平线。 我尝试过 R 中的箱线图示例。问题是: 这些线条跨越整个图,而不仅仅是箱线图。 它们位于箱线图后面..;-) 感谢您提
问题: 我想将 geom_hline 中的 geom_segment 添加到 3 个 stat_summary 点中的每一个,以确定每个物种的平均值。 当前代码: library(tidyverse)
我想在我的图中添加一个图例,其中包含所有 hline 的统计描述。有什么办法可以做到吗? Link to plot def test_plot(): Q1=test['age'].quantile(0
我用 geom_hline() 和 geom_vline() 创建了一个散点图,该图很好,但图例条目不是我想要的显示方式。 vline (Restauration) 和 hline (Threshol
我想在 geom_hline 中为我的水平线创建一个图例。我使用的数据来自 3 个不同的数据帧。我也在使用 gghighlight,我相信它掩盖了任何传说。在这种情况下我如何强制传奇? 3个数据帧是:
输出(x) structure(list(Host = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "A", class
我正在尝试在带有小平面的 ggplot 中为 geom_vline 和 geom_hline 制作单独的图例。 这是我的代码: set.seed(1) vec1 = rnorm(20) set.see
我有一些代码绘制了一些值的直方图,以及一些水平线来表示要比较的引用点。但是,ggplot 不会生成线条的图例。 library(ggplot2) library(dplyr) ## Siumlate
我正在尝试在带有小平面的 ggplot 中为 geom_vline 和 geom_hline 制作单独的图例。 这是我的代码: set.seed(1) vec1 = rnorm(20) set.see
我是一名优秀的程序员,十分优秀!