【问题标题】:Exporting custom color palettes导出自定义调色板
【发布时间】:2020-03-10 20:01:05
【问题描述】:

我正在寻找一种方法来创建我自己的调色板,该调色板可以在 ggplot 中调用,并导出并与我的团队共享 - 不需要在每个 .R 代码中定义调色板。 例如,保存为 *.thmx 的自定义 Excel 主题颜色之类的东西。

理想情况下应该是这样的:

ggplot(mtcars, aes(wt, mpg)) +
    geom_point(size=4, aes(colour = factor(cyl))) +
    scale_colour_brewer(palette="Mypalette")

Mypalette 以某种方式保存在桌面并可以直接调用,无需事先在我的代码中定义它。

或像 Viridis 包一样 - 可能不是最简单的解决方案

ggplot(mtcars, aes(wt, mpg)) +
    geom_point(size=4, aes(colour = factor(cyl))) +
    scale_color_viridis(discrete=TRUE)

我的目标是最终获得共同的共享调色板,从而在多个贡献者制作的图表中实现视觉连贯性。

如果您有任何提示或建议,我非常感兴趣!

非常感谢!

【问题讨论】:

  • 设置一个包!!这就是我在公司所做的。 @MrFlick 的第二个链接是了解函数外观的一个很好的起点。这基本上与我在为公司编写的软件包中采用的方法相同。我还为我们的企业设计添加了一个主题。该软件包可以放在 github 上,或者您可以设置自己的本地 miniCran。所以每个人都可以像使用其他软件包一样使用它。
  • 是的,这是我首先喜欢的方法。我相信这是最好的和直接的。感谢您的链接
  • 我认为存储用于为数据着色的中断也是一个好主意,这样可以使用相同的数据比较绘图:即 scale_color_manual(breaks = c("2", "1", "0.5"), values=c("red", "blue", "green"))

标签: r


【解决方案1】:

大概你希望能够做一些简单的事情,比如在你的情节中添加+ scale_colour_company()。实际上很容易做到这一点,而不需要整个包(当然,如果您的公司有多个 R 用户,那么这样做可能还有其他充分的理由)。

假设您希望能够做到这一点:

data.frame(x = runif(30), y = runif(30), z = factor(rep(letters[1:3], 10))) %>%
  ggplot(aes(x = x, y = y, colour = z)) +
  geom_point(size = 5) + 
  scale_colour_company()

您只需要定义一个调色板函数,它接受一个整数并返回一个代表颜色的字符向量。例如:

company_palette <- function(n)
{
  company_colours <- c("forestgreen", "steelblue1", "#FD759A", "#A39847")
  if(n > length(company_colours)) stop("Need more company colours!")
  return(company_colours[seq(n)])
}

现在您可以非常简单地创建与 ggplot 兼容的函数:

scale_fill_company <- function() discrete_scale("fill", "A", palette = company_palette)
scale_colour_company <- function() discrete_scale("colour", "A", palette = company_palette)

将这 6 行保存在 .R 脚本中,一切顺利

【讨论】:

    【解决方案2】:

    要与您的团队共享调色板,您可以使用调色板制作一个包。以许多调色板包中的一个为例,例如https://github.com/nanxstats/ggsci

    【讨论】:

    • 感谢您的链接。我将首先关注这种方法!谢谢
    【解决方案3】:

    管理您的团队听起来是这个过程中最困难的部分。您是否在共享目录上工作?您使用 GitHub 或类似平台吗?

    如果您在共享目录中,您可以标准化一些读取文件并将颜色分配给名为 "Mypallette" 的变量的 R 代码。

    您只需使用十六进制代码为Mypallette 分配一个字符向量,并让您的团队了解如何使用该过程。

    例子:

    Mypallette <- c("#CA0020","#F4A582", "#D3D3D3", "#92C5DE", "#0571B0")
    

    【讨论】:

    • 是的,我们是。这就是我们迄今为止一直在做的事情。这只是跳过那些不会真正吸引任何人的视觉方面的问题。谢谢你的回答。
    猜你喜欢
    • 2019-04-07
    • 1970-01-01
    • 2021-01-08
    • 2023-03-24
    • 1970-01-01
    • 2020-04-28
    • 2015-05-31
    • 1970-01-01
    • 2021-05-09
    相关资源
    最近更新 更多