R: ggbiplot - 为什么我不能用 guide_legend 控制图例列的数量?
R: ggbiplot - why can't I control the number of legend columns with guide_legend?
我经常使用 ggbiplot
并且可以控制使用 ggplot2
工具生成的情节的各个方面,因为它继承自 ggplot2
...
在ggplot2
中,我通常用如下形式的一行来控制图例中的列数:
ggplot2::guides(fill=ggplot2::guide_legend(ncol=2))
然而,这似乎在 ggbiplot
中不起作用(而其他所有 ggplot2
相关的东西都起作用)。
请使用 iris
数据检查下面的 MWE,我在这里唯一想做的就是为图例指定 2 列(出于说明目的,我知道只有 3 个物种级别,但这是我手头有更多的例子)。
library(ggbiplot)
data(iris)
pca.obj <- prcomp(iris[,1:4], center=TRUE, scale.=TRUE)
P <- ggbiplot(pca.obj,
obs.scale = 1,
var.scale=1,
ellipse=T,
circle=F,
varname.size=3,
var.axes=T,
groups=iris$Species, #no need for coloring, I'm making the points invisible
alpha=0) + #invisible points, I add them below
ggplot2::theme_light() +
ggplot2::scale_color_manual("spec", values=c("red","black","pink"), guide=ggplot2::guide_legend(override.aes=list(shape=19, size=5, linetype=0))) +
ggplot2::guides(fill=ggplot2::guide_legend(ncol=2)) #THIS DOES NOT WORK HERE, WHY?
P$layers <- c(geom_point(aes(color=iris$Species), cex=3), P$layers) #add geom_point in a layer underneath (only way I have to change the size of the points in ggbiplot)
png(filename="test.png", height=600, width=600)
print(#or ggsave()
P
)
dev.off()
这会产生以下双标图:
看看图例中的列数如何永远不变...有没有办法在 ggbiplot
中指定图例列数?谢谢
在第一次调用 guide_legend()
时包含 ncol = 2
会更简单。即
library(ggbiplot)
data(iris)
pca.obj <- prcomp(iris[,1:4], center=TRUE, scale.=TRUE)
P <- ggbiplot(pca.obj,
obs.scale = 1,
var.scale=1,
ellipse=T,
circle=F,
varname.size=3,
var.axes=T,
groups=iris$Species, #no need for coloring, I'm making the points invisible
alpha=0) + #invisible points, I add them below
ggplot2::theme_light() +
ggplot2::scale_color_manual("spec", values=c("red","black","pink"), guide=ggplot2::guide_legend(ncol = 2, override.aes=list(shape=19, size=5, linetype=0))) # +
# ggplot2::guides(fill=ggplot2::guide_legend(ncol=2)) #THIS DOES NOT WORK HERE, WHY?
P$layers <- c(geom_point(aes(color=iris$Species), cex=3), P$layers) #add geom_point in a layer underneath (only way I have to change the size of the points in ggbiplot)
png(filename="test.png", height=600, width=600)
print(#or ggsave()
P
)
dev.off()
正如 Henrik 所说,这是由于 fill =
和 color =
之间的不匹配。
我经常使用 ggbiplot
并且可以控制使用 ggplot2
工具生成的情节的各个方面,因为它继承自 ggplot2
...
在ggplot2
中,我通常用如下形式的一行来控制图例中的列数:
ggplot2::guides(fill=ggplot2::guide_legend(ncol=2))
然而,这似乎在 ggbiplot
中不起作用(而其他所有 ggplot2
相关的东西都起作用)。
请使用 iris
数据检查下面的 MWE,我在这里唯一想做的就是为图例指定 2 列(出于说明目的,我知道只有 3 个物种级别,但这是我手头有更多的例子)。
library(ggbiplot)
data(iris)
pca.obj <- prcomp(iris[,1:4], center=TRUE, scale.=TRUE)
P <- ggbiplot(pca.obj,
obs.scale = 1,
var.scale=1,
ellipse=T,
circle=F,
varname.size=3,
var.axes=T,
groups=iris$Species, #no need for coloring, I'm making the points invisible
alpha=0) + #invisible points, I add them below
ggplot2::theme_light() +
ggplot2::scale_color_manual("spec", values=c("red","black","pink"), guide=ggplot2::guide_legend(override.aes=list(shape=19, size=5, linetype=0))) +
ggplot2::guides(fill=ggplot2::guide_legend(ncol=2)) #THIS DOES NOT WORK HERE, WHY?
P$layers <- c(geom_point(aes(color=iris$Species), cex=3), P$layers) #add geom_point in a layer underneath (only way I have to change the size of the points in ggbiplot)
png(filename="test.png", height=600, width=600)
print(#or ggsave()
P
)
dev.off()
这会产生以下双标图:
看看图例中的列数如何永远不变...有没有办法在 ggbiplot
中指定图例列数?谢谢
在第一次调用 guide_legend()
时包含 ncol = 2
会更简单。即
library(ggbiplot)
data(iris)
pca.obj <- prcomp(iris[,1:4], center=TRUE, scale.=TRUE)
P <- ggbiplot(pca.obj,
obs.scale = 1,
var.scale=1,
ellipse=T,
circle=F,
varname.size=3,
var.axes=T,
groups=iris$Species, #no need for coloring, I'm making the points invisible
alpha=0) + #invisible points, I add them below
ggplot2::theme_light() +
ggplot2::scale_color_manual("spec", values=c("red","black","pink"), guide=ggplot2::guide_legend(ncol = 2, override.aes=list(shape=19, size=5, linetype=0))) # +
# ggplot2::guides(fill=ggplot2::guide_legend(ncol=2)) #THIS DOES NOT WORK HERE, WHY?
P$layers <- c(geom_point(aes(color=iris$Species), cex=3), P$layers) #add geom_point in a layer underneath (only way I have to change the size of the points in ggbiplot)
png(filename="test.png", height=600, width=600)
print(#or ggsave()
P
)
dev.off()
正如 Henrik 所说,这是由于 fill =
和 color =
之间的不匹配。