update_geom_defaults
仅更改调用时使用的单个默认形状
geom_point
而不将某些内容映射到
shape
内在审美
aes()
.
但是,当您添加
形状
在美学上,ggplot使用默认的形状调色板,该调色板将形状16作为其第一个值。形状调色板是为了获得作为第一值的期望形状17而需要改变的。可以通过添加(例如)对单个绘图执行此操作
+ scale_shape_manual(values=c(17, 16))
到绘图代码,这将使形状17成为第一个形状,使形状16成为第二个形状(当您将具有两个不同值的变量映射到
形状
美学但你必须对每一个情节都这样做。相反,您可以更改
违约
形状调色板一次,然后它将自动应用于后续的每个绘图。在下面的例子中,我用一个新的分类列扩充了您的样本数据以进行说明。
library(ggplot2)
library(patchwork)
theme_set(theme_bw(base_size=9))
update_geom_defaults("point", list(shape = 17))
X <- 1:2
Y <- 2:3
group = c("A","B")
DF <- data.frame(X, Y, group)
p1 = ggplot(data = DF,
aes(x = X,
y = Y)) +
geom_point(size=3) +
labs(title="No shape aesthetic")
p2 = ggplot(data = DF,
aes(x = X,
y = Y,
shape=group)) +
geom_point(size=3) +
labs(title="Add shape aesthetic")
p3 = ggplot(data = DF,
aes(x = X,
y = Y)) +
geom_point(aes(shape = "Legend label"), size=3) +
labs(title="Add dummy shape aesthetic")
p1 + p2 + p3
在下面的第二张和第三张图中,请注意,填充的圆仍用作形状选项板中的第一个形状。
如果我们查看默认的形状调色板,我们可以看到它仍然以形状16(实心圆)作为第一个值。
# View default shape palette
scales:::shape_pal()
#> function (n)
#> {
#> if (n > 6) {
#> msg <- paste("The shape palette can deal with a maximum of 6 discrete ",
#> "values because more than 6 becomes difficult to discriminate; ",
#> "you have ", n, ". Consider specifying shapes manually if you ",
#> "must have them.", sep = "")
#> warning(paste(strwrap(msg), collapse = "\n"), call. = FALSE)
#> }
#> if (solid) {
#> c(16, 17, 15, 3, 7, 8)[seq_len(n)]
#> }
#> else {
#> c(1, 2, 0, 3, 7, 8)[seq_len(n)]
#> }
#> }
#> <bytecode: 0x7fa674bbcfb8>
#> <environment: 0x7fa6762a8c60>
下面我们将重新定义
scale_shape_discrete
(这是默认的形状比例),以使用形状17(填充的三角形)作为第一个值。然后,当我们重做绘图时,我们会看到当我们使用
形状
美学
# Redefine default shape palette
scale_shape_discrete = function(...) {
scale_shape_manual(values = c(17, 16, 15, 3, 7, 8))
}
p1 = ggplot(data = DF,
aes(x = X,
y = Y)) +
geom_point(size=3) +
labs(title="No shape aesthetic")
p2 = ggplot(data = DF,
aes(x = X,
y = Y,
shape=group)) +
geom_point(size=3) +
labs(title="Add shape aesthetic")
p3 = ggplot(data = DF,
aes(x = X,
y = Y)) +
geom_point(aes(shape = "Legend label"), size=3) +
labs(title="Add dummy shape aesthetic")
p1 + p2 + p3