1

我正在创建一些小提琴图并想给它们上色。它适用于维数为 9 的矩阵,就像我之前的问题一样

ggplot小提琴图,按组指定不同的颜色?

但是当我将尺寸增加到 15 时,颜色的顺序不受尊重。为什么会这样?

它在这里工作(9列):

library(ggplot2)
dat <- matrix(rnorm(250*9),ncol=9)

# Violin plots for columns
mat <- reshape2::melt(data.frame(dat), id.vars = NULL)

mat$variable_grouping <- as.character(sort(rep(1:9,250)))



pp <- ggplot(mat, aes(x = variable, y = value, fill = variable_grouping)) + 
  geom_violin(scale="width",adjust = 1,width = 0.5)  + scale_fill_manual(values=rep(c("red","green","blue"),3))
pp

在这里它不起作用(15列):

library(ggplot2)
dat <- matrix(rnorm(250*15),ncol=15)

# Violin plots for columns
mat <- reshape2::melt(data.frame(dat), id.vars = NULL)

mat$variable_grouping <- as.character(sort(rep(1:15,250)))



pp <- ggplot(mat, aes(x = variable, y = value, fill = variable_grouping)) + 
  geom_violin(scale="width",adjust = 1,width = 0.5)  + scale_fill_manual(values=rep(c("red","green","blue"),5))
pp
4

2 回答 2

5

这与设置因子水平有关。由于variable_grouping是一个字符,ggplot2将其转换为一个绘图因子。它使用默认的因子顺序,1总是在前面2。因此,在您的示例中,11-15 都在图例中的 2 之前。

您可以手动设置因子顺序以避免默认顺序。我使用forcats::fct_inorder()它是因为在这种情况下您希望因子的顺序与变量的顺序相匹配时很方便。请注意,您也可以直接使用并通过参数factor()设置级别顺序。levels

ggplot(mat, aes(x = variable, y = value, fill = forcats::fct_inorder(variable_grouping))) + 
     geom_violin(scale="width", adjust = 1, width = 0.5)  + 
     scale_fill_manual(values=rep(c("red","green","blue"),5)
于 2018-06-01T16:32:30.587 回答
1

您还可以命名颜色矢量。例如:

my_values <- rep(c("red","green","blue"),5)
names(my_values) <- rep(c("Data1","Data2","Data3"),5)


... +
  scale_fill_manual(values=my_values)
于 2022-02-11T14:52:19.273 回答