Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ggplot颜色基于因子总数,而不仅仅是R中的因子_R_Plot_Ggplot2 - Fatal编程技术网

ggplot颜色基于因子总数,而不仅仅是R中的因子

ggplot颜色基于因子总数,而不仅仅是R中的因子,r,plot,ggplot2,R,Plot,Ggplot2,我正试图搞两个阴谋。其中一个显示变量x按因子类别1拆分的箱线图,第二个图相同,但变量y除外 我在下面提供了可复制的代码 require(ggplot2) dataset <- data.frame(category1 = rep(LETTERS[1:5], 100), y = rnorm(500, mean = rep(1:5, 100)), z = rnorm(500, mean = rep(c(1:4,NA),

我正试图搞两个阴谋。其中一个显示变量x按因子类别1拆分的箱线图,第二个图相同,但变量y除外

我在下面提供了可复制的代码

require(ggplot2)

dataset <- data.frame(category1 = rep(LETTERS[1:5], 100),
                  y = rnorm(500, mean = rep(1:5, 100)),
                  z = rnorm(500, mean = rep(c(1:4,NA), 100)))

ggplot(dataset, aes(x=factor(category1), y=y, fill=category1)) + geom_boxplot()
ggplot(dataset, aes(x=factor(category1), y=z, fill=category1)) + geom_boxplot()
require(ggplot2)

dataset您应该手动设置颜色,以确保在两个绘图中使用相同的调色板。下面是一个使用默认调色板的示例:

+ scale_fill_manual(values = palette("default"))
该软件包具有优雅的预定义选项板,您可以在其上浏览


实现所需效果的最简单、最优雅的方法是使用
缩放\填充\离散
,请参见下面的第二个绘图代码示例:

ggplot(dataset, aes(x=factor(category1), y=z, fill=category1)) +
    geom_boxplot() + scale_fill_discrete(drop=FALSE)
但是,也可以使用以下附加代码完成此操作,该代码创建要在打印中使用的调色板,然后手动设置要使用此调色板的颜色。此解决方案的优点是允许用户定义任何调色板以用作固定方案。解决方案来自上面的代码和@scoa的答案

require(ggplot2)

dataset <- data.frame(category1 = rep(LETTERS[1:5], 100),
                  y = rnorm(500, mean = rep(1:5, 100)),
                  z = rnorm(500, mean = rep(c(1:4,NA), 100)))

n <- length(levels(dataset$category1)) 
hues = seq(15, 375, length=n+1)
cpt <- hcl(h=hues, l=65, c=100)[1:n]

ggplot(dataset, aes(x=factor(category1), y=y, fill=category1)) + 
    geom_boxplot() + scale_fill_manual(values = cpt)
ggplot(dataset, aes(x=factor(category1), y=z, fill=category1)) + 
    geom_boxplot() + scale_fill_manual(values = cpt)
require(ggplot2)

数据集您可以将颜色手册L:
+比例填充手册(值=调色板(“默认”))
设置为每个plot@scoa,这是有效的。我结合了一种方法来模拟ggplot颜色选择方法,以产生所需的效果。这个解决方案看起来并不像ggplot中的大多数那样优雅。像这样的
scale\u fill\u discrete(drop=FALSE)
怎么样?对于更复杂的情况,有一些更复杂的答案。@aosmith是的!这似乎可以做到,我还没有看到这个答案,但另一个使用
scale\u fill\u discrete
的方法,包括了一个
values
参数,这似乎使它不起作用。我将在下面更新我的答案以反映您的评论。我也喜欢RColorBrewer颜色选项。为此,我认为
scale\u fill\u brewer()
也可以用来代替
scale\u fill\u manual()
require(ggplot2)

dataset <- data.frame(category1 = rep(LETTERS[1:5], 100),
                  y = rnorm(500, mean = rep(1:5, 100)),
                  z = rnorm(500, mean = rep(c(1:4,NA), 100)))

n <- length(levels(dataset$category1)) 
hues = seq(15, 375, length=n+1)
cpt <- hcl(h=hues, l=65, c=100)[1:n]

ggplot(dataset, aes(x=factor(category1), y=y, fill=category1)) + 
    geom_boxplot() + scale_fill_manual(values = cpt)
ggplot(dataset, aes(x=factor(category1), y=z, fill=category1)) + 
    geom_boxplot() + scale_fill_manual(values = cpt)