标签: ggtext

对齐 ggplot2 中的多行文本 - 标题、副标题、标题、geom_text() 等

我想证明(不仅仅是对齐!)我的 ggplots 中的多行文本,即主要是标题、副标题、说明文字和注释geom_text()等。

对齐文本

需要明确的是,“对齐文本”是指在单词之间添加空格,以便每行的两个边缘都与两个边距对齐。段落中的最后一行左对齐。在下图中,它将是右侧的格式,以黄色突出显示:

在此输入图像描述

代表

下面是一个可重现的示例,尝试同时使用{ggplot2}{ggtext}。正如您所看到的,我只能想到使用hjust=(和halign=with {ggtext}),但它们只能对齐而不对齐多行文本。

library(ggtext)
library(tidyverse)

my_text <- "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."
my_subtitle <- paste(rep(my_text, 5), collapse = " ")

df <- tibble(
  my_text = rep(my_text, 3),
  x = c(1, 2, 3),
  y = c(2, 1, 0),
  hjust = c(0, 0.5, 1),
  vjust = c(0, 0.5, 1)
) …
Run Code Online (Sandbox Code Playgroud)

r justify ggplot2 ggtext

13
推荐指数
0
解决办法
890
查看次数

在 ggplot2 geom_text 中以颜色渲染 unicode 表情符号

我有包含表情符号的 unicode 文本。我想用 geom_text 或 geom_label 以包含表情符号颜色的方式将它们渲染在 ggplot2 图形中。我看过了emojifont,这些emo似乎ggtext都不允许这样做。当然,问题是文本的颜色geom_text受颜色审美的影响。有什么方法可以通过 geom_text 或其他解决方法在文本中呈现颜色?

可重现的例子:

library(ggplot2)

pets <- "I like    "

cat(pets)

ggplot() +
  theme_void() +
  annotate("text", x = 1, y = 1, label = pets, size = 15)
Run Code Online (Sandbox Code Playgroud)

RStudio 的屏幕上可以正常工作cat(pets),但最后一行绘制的图形如下所示:

在此输入图像描述

或者,ggtext::geom_richtext()我得到类似的黑白结果和此错误消息:

> library(ggtext)
> ggplot() +
+   theme_void() +
+   annotate("richtext", x = 1, y = 1, label = pets, size = 15)
Warning messages:
1: In text_info(label, fontkey, fontfamily, …
Run Code Online (Sandbox Code Playgroud)

fonts r ggplot2 ggtext

8
推荐指数
1
解决办法
1142
查看次数

是否可以仅更改 1 个方面标题的对齐方式

假设我有一个像这样的多面 ggplot:

data(iris)
ggplot(iris, aes(x = Petal.Width, y = Sepal.Length)) +
  facet_grid(. ~ Species) +
  geom_point()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

题:

是否可以仅将第一个方面标签(“setosa”)与左侧对齐,但将其他方面保持在中央?

我对直接没有任何运气ggplot,所以我尝试转换为 gtable(下面的代码),我可以看到我可能需要修改的元素是 tableGrb #13 - strip-t-1,但我不确定怎么做。我尝试将gt$layout$lgt$layout$r值更改为 4(原为 5),但这会将标题完全移出构面。

pl <- ggplot(iris, aes(x = Petal.Width, y = Sepal.Length)) +
  facet_grid(. ~ Species) +
  geom_point()
gt <- ggplotGrob(pl)

gt$layout[gt$layout$name == 'strip-t-1', c('l', 'r')] <- c(4, 4) # my attempt
grid.newpage()
grid.draw(gt)
Run Code Online (Sandbox Code Playgroud)

有谁知道这是否可能?

r ggplot2 facet-grid ggtext

8
推荐指数
2
解决办法
299
查看次数

在多个 ggplot 的 {patchwork} 中添加纯文本部分的最佳方法?

当使用{patchwork}将单独的 ggplots 组合成同一个图形时,我有时想添加一个或多个根本不是绘图的部分,但基本上是一个文本框。

据我所知,拼凑文档中唯一一次解决这个问题是在这里使用wrap_elements(grid::textGrob('Text on left side')). 然而,这是行不通的,因为我想使用{ggtext}主要是为了(i)自动换行和(ii)混合常规、斜体、粗体和彩色文本(参见例如此处)。

到目前为止,我已经找到了两种不同的方法来实现这项工作,它们在下面的 reprex 中进行了演示。两种方法的共同点是它们基本上隐藏了 ggplot 中不是所需文本的所有部分。

  • 第一种方法(灵感来自此处:绘图相关代码)将文本添加为ggtext::geom_textbox()​​ 。
  • 第二种方法(灵感来自这里:绘图相关代码)将文本添加为subtitle​​ with theme(plot.subtitle = ggtext::element_markdown())

问题

然而,我的问题是,是否有更好/更简单的方法来实现这一点。主要是因为正如您在下面的 reprex 中看到的那样,在文本正确排列之前需要进行一些margin()操作。plot_layout()

我可以想到对于此文本我想要两种不同的垂直对齐方式:

  1. 这样它就从与左图标题相同的高度开始。p2与此接近,但需要手动扭转。此外,它目前为左侧图的标题和副标题添加了不必要的垂直空间。
  2. 这样它就从与左图的绘图区域相同的高度开始。p1与此接近,但需要手动扭转

代表

# setup -------------------------------------------------------------------
library(ggtext)
library(glue)
library(patchwork)
library(tidyverse)

cols <- c(ctrl = "red", trt1 = "blue", trt2 = "purple")

string <- glue("<i style='color:{cols}'>{names(cols)}</i>") …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 patchwork ggtext

8
推荐指数
1
解决办法
1210
查看次数

有条件地填充 facet_wrap 中的 ggtext 文本框

是否可以有条件地填充这些[ggtext][1]文本框?如果“拾取”,我们说颜色“红色”。

在此处输入图片说明

library(cowplot)
library(tidyverse)
library(ggtext)

ggplot(mpg, aes(cty, hwy)) + 
  geom_point() +
  facet_wrap(~class) +
  theme_half_open(12) +
  background_grid() +
  theme(
    strip.background = element_blank(),
    strip.text = element_textbox(
      size = 12,
      color = "white", fill = "#5D729D", box.color = "#4A618C",
      halign = 0.5, linetype = 1, r = unit(5, "pt"), width = unit(1, "npc"),
      padding = margin(2, 0, 1, 0), margin = margin(3, 3, 3, 3)
    )
  )
Run Code Online (Sandbox Code Playgroud)

r ggplot2 ggtext

6
推荐指数
1
解决办法
574
查看次数

使用 ggtext 的 ggplots 拼凑标题中的颜色?

如何使用 ggtext 为拼凑而成的 ggplots 赋予彩色标题?

例子

假设我们有四个图

library(ggplot2)
library(patchwork)
library(ggtext)

p1 <- ggplot(mtcars) + 
  geom_point(aes(mpg, disp)) + 
  ggtitle('Plot 1')

p2 <- ggplot(mtcars) + 
  geom_boxplot(aes(gear, disp, group = gear)) + 
  ggtitle('Plot 2')

p3 <- ggplot(mtcars) + 
  geom_point(aes(hp, wt, colour = mpg)) + 
  ggtitle('Plot 3')

p4 <- ggplot(mtcars) + 
  geom_bar(aes(gear)) + 
  facet_wrap(~cyl) + 
  ggtitle('Plot 4')
Run Code Online (Sandbox Code Playgroud)

这些可以这样安排

patch <- (p1 + p2) / (p3 + p4)
patch
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

拼凑而成的标题可以像这样

patch +
  plot_annotation(
  title = "Here is a regular title")
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

单个 ggplot 可以像这样被赋予一个丰富多彩的标题

p1 + …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 patchwork ggtext

6
推荐指数
1
解决办法
312
查看次数

如何在ggtree的系统发育树中的同一标签中应用斜体和普通字体

我想要斜体的 A,普通的 CBS。我认为 ggtext 可能有用,但我遇到了错误。这是一个例子:

tree<-read.tree(text="(A,(B,C));")
labs=c("*A*CBS","B","C")
tree$tip.label<-labs
ggtree(tree)+ geom_tiplab(align=T) + geom_richtext()

error: geom_rich_text requires the following missing aesthetics: label
Run Code Online (Sandbox Code Playgroud)

我也尝试过

ggtree(tree)+ aes(label=labs)+geom_tiplab(align=T) + geom_richtext()
error: Aesthetics must be either length 1 or the same as the data (5): label
Run Code Online (Sandbox Code Playgroud)

但我需要的富文本位于三个提示标签中,并非所有五个标签(提示和节点)中有人知道如何添加标签美观(作为提示标签)吗?

r ggplot2 ggtree ggtext

5
推荐指数
1
解决办法
915
查看次数

ggplot 的注释中的文本格式

是否可以使用 html 代码进行注释?我试图只为几个单词而不是整个文本着色。

library(tidyverse)
#> Warning: package 'ggplot2' was built under R version 4.0.2

mtcars %>%
  ggplot(aes(x = hp, y = mpg)) +
  geom_point() +
  annotate(geom = "text", label = "I'm <span style='color: red;'>red</span> \n and i'm <span style='color: orange;'>orange</span>",
           x = 250, y = 25)
Run Code Online (Sandbox Code Playgroud)

reprex 包(v0.3.0)于 2020 年 8 月 22 日创建

r ggplot2 ggtext

4
推荐指数
1
解决办法
640
查看次数

ggplot2 facet 标签 - 第二行不显示

我有一个脚本,用于生成带有多行条带文本的多面图。但这不再起作用了。下面是一个 MWE,应该从中解析条带文本,例如"bold(A)\nreally~long~extra"

一个
很长的额外

正如您通过调试功能看到的那样,第二行被切断了。我什至增加了利润,但无济于事......

任何想法是什么问题?

exmpl = data.frame(a = 1:100,
               b = rep(1:5, 20),
               f = factor(rep(LETTERS[1:5], each = 20))) %>% 
  as_tibble() %>% 
  mutate(f2 = paste0("bold(",f, ")\nreally~long~extra"))

ggplot(exmpl, aes(x = b, y = a)) +
  facet_grid(. ~ f2, labeller = label_parsed) +
  geom_point() +
  theme(strip.text.x = element_text(size = 10, hjust = 0, margin = margin(.5, 0, .5, 0, "cm"), debug = T))
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

编辑:

当我们这样做时,我只是想出了这个解决方法,因为我之前使用的解决方案label_bquote()不再有效。请看看另一个问题,也许你也可以帮我解决这个问题?

label r ggplot2 facet-grid ggtext

4
推荐指数
1
解决办法
178
查看次数

更改 ggplot2 图例中单个标签的字体(粗体)

我在 R 4.0.2 中有一个数据集,其中两个连续变量分为两组(变量曲线:“Exp.”或“Molecular\\ndynamics”)。我使用 geom_smooth 图层(ggplot2 3.3.2)绘制它们,并按曲线组对它们进行着色,并且我还设置该组为它们赋予不同的线型,但然后我使用 scale_linetype_manual 对其进行修改,分别为它们提供虚线和实线线型。

\n

我想做“Exp”。图例标签加粗。我尝试了很多方法(即对其他人问题的许多答案)来尝试手动重命名图例标签(在scale_linetype_manual中添加labels=;在guides()中尝试了override.aes...),但是我设法做的最好的事情就是获得具有不同标签的重复图例,该图例不保留颜色或线型,也不显示“Exp”。以粗体显示。(我认为问题是我已经使用scale_xxx来手动调整线型,因此我测试过的有关如何编辑标签的其余答案与我的代码不兼容,并且我不具备相关知识找出问题)。

\n

目前的代码:

\n
ggplot() +\n  geom_smooth(data = data, aes(x=`T(K)`, y=dG, color=Curve, linetype=Curve), size=2, se=FALSE) +\n  theme_classic() + scale_color_brewer() +\n  ggtitle(\'Lysozyme\') + xlab(\'T (K)\') + ylab(\'\xe2\x88\x86G (kcal/mol)\') +\n  theme(panel.border = element_rect(colour = "black", fill=NA)) +\n  scale_linetype_manual(values=c("dashed", "solid")) +\n  theme(text = element_text(family="", size=20),\n        plot.title = element_text(hjust = 0.5, face="bold", size=20),\n        axis.title.y = element_text(size=20, margin=margin(r=25)),\n        axis.title.x = element_text(size=20, margin=margin(t=25)),\n        axis.text = element_text(size=20, color="black"),\n        legend.text = element_text(margin = margin(t = 10, …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 ggtext

4
推荐指数
1
解决办法
1万
查看次数

标签 统计

ggplot2 ×10

ggtext ×10

r ×10

facet-grid ×2

patchwork ×2

fonts ×1

ggtree ×1

justify ×1

label ×1