ggplot2-标度、坐标轴和图例3

图例

尽管大多数重要的参数坐标轴和图例是共享的,但是有一些额外的设置仅适用于图例

图例比坐标轴更复杂,因为:

  1. 一个图例能从多个图层中展示多个图形属性(例如:颜色和形状),并且在不同层的不同几何对象的图例也不同
  2. 坐标轴总是看起来在相同的位置。图例可以出现在不同的位置,因此需要一些全局的方式来控制它们
  3. 图例有很多细节可以微调:它们应该垂直或水平展示?有多少列?关键字应该有多大?

1. 图层和图例

一个图例需要从多个图层中画出符号
例如,如果将颜色既映射到点上又映射到线上的话,关键字既展示点又展示线。如果映射到填充颜色上,会得到一个矩形
默认情况下,如果相应的图形属性被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(“名字”)。因此如果改变了其中一个标度的名字,也需要改变其它标度的名字

2. 图例布局

影响图例展示的很多设置由主题系统(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")

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在左/右和上/下之间转化来调整关键字在每个图例中的展示方式(横着还是竖着),和多个图例的堆叠方式(水平还是垂直)。如果需要,可以独立地调整这些设置

  1. legend.direction:图例中条目的布局(“horizontal”或“vertical”)
  2. legend.box:多个图例的安排(“horizontal”或“vertical”)
  3. legnd.box.just:当有多个图例时,整个区间内的每个图例的对齐方式(top、bootom、left、right)
    另外,如果在图中有很大的空白空间,可以将图例放到图的里面。把legend.position参数设为一个长度为2的数值向量来达成这个目标。这个数值代表在面板区域中的相对位置:c(0, 1)表示左上角,c(1, 0)表示右下角
    可以参阅legend.position及legend.justification相同的方式来控制图例的位置。不过,精确的定位图例需要经过大量的测试,并经历多次错误
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”)来加以控制

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值