在不知道 ggplot2 中的标签的情况下更改标签的字体大小

change font size of labels without knowing labels in ggplot2

我想更改此图中标签的字体大小:

library(ggplot2)
p <- ggplot(mtcars, aes(x=wt, y=mpg)) + 
        geom_text(label=rownames(mtcars))
p

我的问题:我不知道标签是什么。(我存储了一个图,其中我使用了不同的 data.frame()add geom_text()。我现在只加载了绘图(在此示例中为 p),但不想同时加载我用来创建标签的 data.frame()s)。

因为我不知道标签是什么,所以我不能使用这个解决方案:

p + geom_text(label=rownames(mtcars), size=2)

(此解决方案的另一个问题是我仍然需要删除具有较大字体大小的原始 geom_text())。


我可以使用此解决方案更改绘图中所有文本的大小:

library(grid)    
grid.force()
grid.gedit("GRID.text", grep=TRUE, gp=gpar(fontsize=4.5))

然而,现在我的轴也变了,这不是我想要的。


我相信有几种选择可以实现我想要的,其中至少有两种应该相当容易实现:

  1. 将对象从 grid.gedit() 保存到 p1,然后保存到 p1 + theme(text = element_text(size=2))。我的问题是:我不知道如何保存 grid.gedit() 中的对象。 这是我的首选。

  2. 应用前转到右侧视口 grid.gedit()。我试过了,但仍然更改了标签(我想要的)和轴文本(我不想要的)。

  3. 以某种方式从存储的图中提取标签的 data.frame(本例中为 p)以应用我首先提供的解决方案。

您可以在构建后检查(/修改)地块,

library(ggplot2)
p <- ggplot(mtcars, aes(x=wt, y=mpg)) + 
  geom_text(label=rownames(mtcars))

g <- ggplot_build(p)
# original data is in str(g$plot$data)

# but it's easier to process the data for rendering
g[["data"]][[1]][["size"]] <- 5
g[["data"]][[1]][["colour"]] <- "red"

gg <- ggplot_gtable(g)
grid.newpage()
grid.draw(gg)

您的 grid.gedit 命令已关闭。您需要设置 gPath 以便编辑命令仅在绘图面板中找到这些标签。 grid.ls(grid.force()) returns 等级制度。找到 'panel',然后找到 'text'。 (注:'gedit'中的'g'代表'grep = TRUE, global = TRUE')

library(ggplot2)
p <- ggplot(mtcars, aes(x=wt, y=mpg)) + 
        geom_text(label=rownames(mtcars))
p

library(grid)    
grid.ls(grid.force())   # Locate the path to the labels in the panel
grid.gedit(gPath("panel","GRID.text"), gp=gpar(fontsize=4.5))

如果您愿意,只需多写几行代码,就可以编辑绘图对象,而不是在屏幕上编辑。

g = ggplotGrob(p)
g = editGrob(grid.force(g), gPath("panel", "GRID.text"), grep=TRUE, gp=gpar(fontsize=4.5))
grid.newpage()
grid.draw(g)