2017-10-08 133 views
0

我正在制作很多地块,并且希望为数据标签设置默认颜色,而不必将color参数传递给每个geom_text调用。我可以为绘图标题和坐标轴,但不是数据标签。如何在R ggplot2中设置默认的geom_text颜色?

# Example of how to set default color for other text elements 
library(ggplot2) 
theme_set(theme_bw() + theme(text = element_text(color = "red"), 
          axis.text = element_text(color = "red"))) 
ggplot(mtcars, aes(x = cyl, label = ..count..)) + 
    geom_bar() + 
    geom_text(stat = "count") + 
    labs(title = "title") 
+2

一个可能的解决方案,可在http://ggplot2.tidyverse.org/reference/update_defaults.html找到。 'update_geom_defaults(“text”,list(color =“red”)); ggplot(mtcars,aes(mpg,wt))+ geom_text(label = hp)' – bdemarest

+0

@bdemarest作为回答? – dww

+0

@bdemarest这是我正在寻找的解决方案。你应该回答 –

回答

2

不幸的是,我认为主题元素仅仅是为了适用于情节的非数据相关的元素,这意味着该主题不包括在geom_text文本。默认颜色"black"geom_text的源代码中被硬编码,所以据我所知,没有简单的方法来覆盖它。 (不过,如果有人在意纠正我,优秀!)

但是,一个简单的解决方案可以帮助简化事情是创建一个包装函数,它将返回一个geom_text所有默认值,您将一遍又一遍地传递。例如:

geom_text_wrap <- function(col="red", ...) { 
    geom_text(col=col, ...) 
} 

可以代替geom_text直接使用,并且会在默认情况下,创建红色文本。因此,以下内容将创建红色文本,而不必直接在绘图创建中指定它。

ggplot(mtcars, aes(x = cyl, label = ..count..)) + 
    geom_bar() + 
    geom_text_wrap(stat="count") + 
    labs(title = "title") 

注:如果你真的要创建一吨的类似地块,以你是累人指定重复参数的点,你可以考虑编写将编程创建完整的图形对象的功能。这将取决于您的具体使用情况。

相关问题