首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ggplot2中对回归线等使用调色板填充/颜色

在ggplot2中对回归线等使用调色板填充/颜色
EN

Stack Overflow用户
提问于 2017-07-20 23:34:41
回答 2查看 678关注 0票数 1

我正在寻找一种方法,让回归线和其他我可能希望覆盖在图形上的东西从调色板中获取下一个可用的颜色。例如,假设我在mtcars数据集中绘制mpgcyl。我将每个cyl视为不同的样本,因此我使用定性调色板,但我在燃油效率是气缸的线性函数的假设下添加了一条回归线。

代码语言:javascript
复制
library(ggplot2)
p <- ggplot(mtcars, aes(cyl, mpg)) +
  geom_violin(aes(fill = factor(cyl))) +
  geom_jitter(width = 0.5) +
  geom_smooth(method = "lm") +
  theme(legend.position = "none") +
  scale_x_continuous(breaks = c(4,6,8))
p

你可以看到这个图:

我希望回归线的颜色与主题保持一致。我可以计算出这个系列中的下一个颜色应该是C77CFF,但是如果我改变主题呢?

代码语言:javascript
复制
p + scale_fill_brewer(palette = "Set1")

有没有办法让geom_smooth自动抓取调色板中的下一个颜色?或者只抓取第N个颜色怎么样?在探索性数据分析之后,我知道我的数据中有多少个类,并且我可以对此进行硬编码。我只是想要一种更简单的方式来浏览不同的调色板。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-21 09:08:21

实现它的最简单的方法是只使用色彩美学,而不是同时使用颜色和填充。请注意,通过更改小提琴的轮廓,而不是填充,我们可以在平滑器的aes()中手动添加另一个颜色级别,称为“回归”。这对于更改调色板也是很健壮的,请参见下面的示例。

代码语言:javascript
复制
ggplot(mtcars, aes(cyl, mpg)) +
  geom_violin(aes(colour = factor(cyl)), size = 2) +
  geom_jitter(width = 0.5) +
  geom_smooth(method = "lm", aes(color = "Regression"), size = 2) +
  scale_x_continuous(breaks = c(4,6,8))

但是如果你想在同一个调色板中混合填充和颜色,你需要使用像我上面的注释这样的解决方案。

代码语言:javascript
复制
numbrk <- 4
# Your number of categories, known a priori, plus one

mypal <- scales::brewer_pal(palette = "YlGnBu")(numbrk)
# Now you just have to put in your chosen palette once
# "#FFFFCC" "#A1DAB4" "#41B6C4" "#225EA8"

fillpal <- mypal[1:(numbrk-1)]
colpal <- mypal[numbrk]

ggplot(mtcars, aes(cyl, mpg)) +
  geom_violin(aes(fill = factor(cyl))) +
  geom_jitter(width = 0.5) +
  geom_smooth(method = "lm", aes(color = "Regression")) +
  scale_x_continuous(breaks = c(4,6,8)) +
  scale_fill_manual(values = fillpal) +
  scale_colour_manual(values = colpal)

票数 1
EN

Stack Overflow用户

发布于 2017-07-21 07:10:56

我不确定这是否更容易,但您可以创建一个如下所示的函数来实现您想要的结果:

代码语言:javascript
复制
palette_plot <- function(df, x_var, y_var, chosen_palette) {
  num_levels <- nlevels(as.factor(df[[x_var]]))
  line_color <- scales::brewer_pal(palette = chosen_palette)(num_levels + 1)
  line_color <- line_color[[num_levels + 1]]
  fill_var   <- as.factor(df[[x_var]])

  ggplot(df) +
    aes_string(x_var, y_var) +
    geom_violin(aes(fill = fill_var)) +
    geom_jitter(width = 0.5) +
    geom_smooth(method = "lm", color = line_color) +
    theme(legend.position = "none") +
    scale_x_continuous(breaks = c(4,6,8)) +
    scale_fill_brewer(palette = chosen_palette)
}

测试"Pastel2“调色板。

代码语言:javascript
复制
 palette_plot(mtcars, "cyl", "mpg", "Pastel2")

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45219254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档