如何让geom_text继承主题规范? (GGPLOT2)

时间:2018-02-25 20:11:31

标签: r ggplot2 themes ggrepel

db["collectionName"].find({_id: {$exists: true}}).forEach(function(doc) { if (Object.keys(doc).length === 1) { // ..delete this document db["collectionName"].remove({_id: doc._id}) } }) 中是否有一种优雅的方式使ggplot2 / geom_text继承geom_label的{​​{1}}规范?

或反过来问:我是否可以指定同样适用于theme / base_family的{​​{1}}?

示例:

我希望theme看起来与geom_text中指定的geom_label完全相同...

显然我可以手动添加规范作为text/labels的可选参数,但我希望它能够继承规范"自动" ...

axis.text

<code>theme</code> specifications not inherited

补充:与theme一起使用的解决方案也是完美的......

1 个答案:

答案 0 :(得分:5)

你可以

设置整体字体

首先,根据系统,您需要检查哪些字体可用。当我在Windows上运行时,我使用以下内容:

install.packages("extrafont")
library(extrafont)
windowsFonts() # check which fonts are available

theme_set功能可让您指定ggplot的整体主题。因此,theme_set(theme_minimal(base_family = "Times New Roman"))允许您定义绘图的字体。

制作标签继承字体

要使标签继承此文本,我们需要使用两件事:

  1. update_geom_defaults可让您更新ggplot中未来绘图的几何对象样式:http://ggplot2.tidyverse.org/reference/update_defaults.html
  2. theme_get()$text$family提取当前全局ggplot主题的字体。
  3. 通过组合这两者,标签样式可以更新如下:

    # Change the settings
    update_geom_defaults("text", list(colour = "grey20", family = theme_get()$text$family))
    update_geom_defaults("text_repel", list(colour = "grey20", family = theme_get()$text$family))
    

    结果

    theme_set(theme_minimal(base_family = "Times New Roman"))
    
    # Change the settings
    update_geom_defaults("text", list(colour = "grey20", family = theme_get()$text$family))
    
    # Basic Plot
    ggplot(mtcars, aes(x = mpg,
                       y = hp,
                       label = row.names(mtcars))) +
      geom_point() +
      geom_text()
    

    enter image description here

    # works with ggrepel
    update_geom_defaults("text_repel", list(colour = "grey20", family = theme_get()$text$family))
    
    library(ggrepel)
    
    ggplot(mtcars, aes(x = mpg,
                       y = hp,
                       label = row.names(mtcars))) +
      geom_point() +
      geom_text_repel()
    

    enter image description here