赞
踩
尽管大多数重要的参数坐标轴和图例是共享的,但是有一些额外的设置仅适用于图例
图例比坐标轴更复杂,因为:
一个图例需要从多个图层中画出符号
例如,如果将颜色既映射到点上又映射到线上的话,关键字既展示点又展示线。如果映射到填充颜色上,会得到一个矩形
默认情况下,如果相应的图形属性被aes()映射到一个向量的话,图像会仅仅展示这个图层,可以用show.legend来修改是否展示图层:FALSE避免图例中的图层展示出来;TRUE则强制一个图层无论在什么情况下都展示出来
以下技巧结合TRUE能有效的突出数据点的展示
df <- data.frame(x = c(0.50, 0.75, 1.00, 1,25, 1.50), y= c(1, 2, 3), z = c('a', 'b', 'c'))
ggplot(df, aes(y, y)) +
geom_point(size = 4, color= "grey20") +
geom_point(aes(color = z), size = 2)
ggplot(df, aes(y, y)) +
geom_point(size = 4, color = "grey20", show.legend = TRUE) +
geom_point(aes(color = z), size = 2)
有时想要图例和图形中的几何对象有所不同。如果使用了透明度或大小来区分重合了的部分,并且在图形中添加了颜色,那么这种区分几何对象的做法特别有用。可以使用guid_legend()函数的override.aes参数
norm <- data.frame(x = rnorm(1000), y = rnorm(1000))
norm$z <- cut(norm$x, 3, labels = c("a", "b", "c"))
ggplot(norm, aes(x, y))+
geom_point(aes(color = z), alpha = 0.1)
ggplot(norm, aes(x, y)) +
geom_point(aes(color = z), alpha = 0.1) +
guides(color = guide_legend(override.aes = list(alpha = 1)))
ggplot2试着使用最少的图例来准确的表达图中使用的图形属性。它通过将相同的变量映射到不同的几个属性中来组合图例
下图展示了这些点是如何工作的:如果颜色和形状被映射到相同的变量中,那么仅仅用一个图例就够了
ggplot(df, aes(x, y)) +
geom_point(aes(color = z))
ggplot(df, aes(x, y)) +
geom_point(aes(shape = z))
ggplot(df, aes(x, y)) +
geom_point(aes(shape = z, color = z))
为了图例的合并,它们必须有相同的name(“名字”)。因此如果改变了其中一个标度的名字,也需要改变其它标度的名字
影响图例展示的很多设置由主题系统(theme system)所控制
可以用theme()函数来调整这些主题设定
图例的位置和对齐方式的调整被主题设定参数legend.position控制,它可以取值为right、left、top、bottom、none(无图例)
df <- data.frame(x = 1:3, y = 1:3, z = c("a", "b", "c"))
base <- ggplot(df, aes(x ,y)) +
geom_point(aes(color = z), size = 3) +
xlab(NULL) + ylab(NULL)
base + theme(legend.position = "right") # 默认
base + theme(legend.position = "bottom")
base + theme(legend.position = "none")
在左/右和上/下之间转化来调整关键字在每个图例中的展示方式(横着还是竖着),和多个图例的堆叠方式(水平还是垂直)。如果需要,可以独立地调整这些设置
base <- ggplot(df, aes(x, y)) +
geom_point(aes(color = z), size = 3)
base + theme(legend.position = c(0, 1), legend.justification = c(0, 1))
base + theme(legend.position = c(0.5, 0.5), legend.justification = c(0.5, 0.5))
base + theme(legend.position = c(1, 0), legend.justification = c(1, 0))
图例也有一个边距,可以使用legend.margin = unit(0, “mm”)来加以控制
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。