R 使用函数在ggplot中手动绘制颜色

R 使用函数在ggplot中手动绘制颜色,r,ggplot2,reprex,R,Ggplot2,Reprex,我有一个主题函数,我想在函数中添加scale\u fill\u manual(values=x),并更新我的所有绘图,但如果我在my\u theme函数中添加这一行,它将不起作用。另外,我不知道如何禁止使用reprex加载库中的消息 library(tidyverse,悄悄地=TRUE) #在这里,我只是从RGB颜色创建我的十六进制颜色。 x% map_df(~paste0(#,.x))%>% 拉 #这是我的主题功能,我想添加比例填充手册, #但这样做是行不通的。我试过不同的组合。 我的主题%

我有一个主题函数,我想在函数中添加
scale\u fill\u manual(values=x)
,并更新我的所有绘图,但如果我在
my\u theme
函数中添加这一行,它将不起作用。另外,我不知道如何禁止使用
reprex
加载库中的消息

library(tidyverse,悄悄地=TRUE)
#在这里,我只是从RGB颜色创建我的十六进制颜色。
x%
map_df(~paste0(#,.x))%>%
拉
#这是我的主题功能,我想添加比例填充手册,
#但这样做是行不通的。我试过不同的组合。
我的主题%
ggplot()+
几何图形条(aes(x=fct\U INFOREQ(等级),填充=系数(圆柱体)),颜色=“黑色”,宽度=0.5)+
实验室(title=“CK farver”)+
我的主题()+
比例\填充\手动(值=x)+
主题(axis.text.x=元素\文本(角度=-90,hjust=0))


由(v0.2.0)于2019-04-16创建。

除非您打算将额外的主题规范传递到我的主题中,否则我认为没有必要将其定义为函数。一份清单就行了

以下内容适用于您的目的:

my_theme2 <- list(
  theme_minimal() +
    theme(title = element_text(color = "gray25"),
          plot.subtitle = element_text(size=12),
          plot.title = element_text(size=12),
          plot.caption = element_text(color= "gray30")) ,
  scale_fill_manual(values = x)
)

mpg %>% 
  ggplot() +
  geom_bar(aes(x = fct_infreq(class), fill=factor(cyl)), color="black", width = 0.5) +
  labs(title= "CK farver") +
  my_theme2 + 
  theme(axis.text.x = element_text(angle = -90, hjust = 0))
我的主题2%
ggplot()+
几何图形条(aes(x=fct\U INFOREQ(等级),填充=系数(圆柱体)),颜色=“黑色”,宽度=0.5)+
实验室(title=“CK farver”)+
我的妈妈2+
主题(axis.text.x=元素\文本(角度=-90,hjust=0))
(未显示输出曲线图,因为它与问题中的曲线图相同)

使用上述功能版本编辑

my_theme3 <- function(...){
  list(
    theme_minimal() +
      theme(title = element_text(color = "gray25"),
            plot.subtitle = element_text(size=12),
            plot.title = element_text(size=12),
            plot.caption = element_text(color= "gray30"),
            ...) ,
    scale_fill_manual(values = x)
  )
}

# same plot as before
mpg %>% 
  ggplot() +
  geom_bar(aes(x = fct_infreq(class), fill=factor(cyl)), color="black", width = 0.5) +
  labs(title= "CK farver") +
  my_theme3() +
  theme(axis.text.x = element_text(angle = -90, hjust = 0))

# if you want to add other tweaks to the theme, e.g. red labels, different legend position
mpg %>% 
  ggplot() +
  geom_bar(aes(x = fct_infreq(class), fill=factor(cyl)), color="black", width = 0.5) +
  labs(title= "CK farver") +
  my_theme3(axis.text = element_text(color = "red"),
            legend.position = "bottom") +
  theme(axis.text.x = element_text(angle = -90, hjust = 0))
我的主题3%
ggplot()+
几何图形条(aes(x=fct\U INFOREQ(等级),填充=系数(圆柱体)),颜色=“黑色”,宽度=0.5)+
实验室(title=“CK farver”)+
我的主题3()+
主题(axis.text.x=元素\文本(角度=-90,hjust=0))
#如果要向主题添加其他调整,例如红色标签、不同图例位置
mpg%>%
ggplot()+
几何图形条(aes(x=fct\U INFOREQ(等级),填充=系数(圆柱体)),颜色=“黑色”,宽度=0.5)+
实验室(title=“CK farver”)+
my_theme3(axis.text=element_text(color=“red”),
legend.position=“底部”)+
主题(axis.text.x=元素\文本(角度=-90,hjust=0))

谢谢,它很好用,但是你为什么把
缩放填充手册
放在
主题
中,而不是作为一行,由
+
分隔?@David
缩放*
是列表中的一个单独的部分。如果多个组件位于列表中,则可以在一次swop中将它们添加到ggplot对象中。您可以在
?%%++
中的最后一个示例中看到这一点如果您想查看底层代码,相关方法在
ggplot2:::ggplot_add.list
@Z中定义。林:非常感谢,但是如果我想保留我的函数呢?你能以函数形式提供解决方案吗?@David,当然可以。编辑。