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

标度工具箱

和调整默认的标度一样,可以用新的标度完全覆盖它们。标度可以被严格的分为四组

  1. 连续位置标度,用来映射整数、数值、日期/时间输入到x轴和y轴
  2. 颜色标度,用来映射连续数据和离散数据到颜色上
  3. 人工标度,用来映射离散数据到所选的尺寸、线型或颜色中
  4. 同一型标度,用来绘制变量但不对它们进行放缩,如果数据是颜色名向量的话,这会很有用

1. 连续位置标度

每幅图都有两个位置标度,x和y。最常见的连续位置标度是scale_x_continuous()和scale_y_continuous(),它们线性地将数据映射到x和y轴。变换之后,可以得到最有意思的衍生效果。所有连续标度都需要一个trans参数,从而可以使用一系列变换

# 从燃料经济转为燃料消费
ggplot(mpg, aes(displ, hwy)) +
	geom_point() +
	scale_y_continuous(trans = "reciprocal")

ggplot(diamonds, aes(price, carat)) + # x 和 y 轴进行对数变换
	geom_bin2d() + scale_x_continuous(trans = "log10") +
	scale_y_continuous(trans = "log10")

在这里插入图片描述
在这里插入图片描述

这种转换通过一种==“变换器(transformer)”==来实现,它描述变换本身和它的逆,以及绘制标签的方式
下表列出了较为常用的变换器

名称变换函数f (x)逆变换函数f-1(y)
asntanh-1(x)tanh(y)
expexlog(y)
identityxy
loglog(x)ey
log10log10(x)10y
log2log2(x)2y
logit l o g ( x 1 − x ) log(\frac{x}{1-x} ) log(1xx) 1 1 + e ( y ) \frac {1}{1 + e(y)} 1+e(y)1
pow1010xlog10(y)
probit ϕ ( x ) \phi(x) ϕ(x) ϕ − 1 ( y ) \phi ^-1^ (y) ϕ1(y)
reciprocalx-1y-1
reverse-x-y
sqrtx1/2y2

一些常见的变换有简写:scale_x_log10()、scale_x_sqrt()、scale_x_reverse()(y与之很类似)
当然,也可以自行变换。举例来说,可以直接绘制log10(x),而不使用scale_x_log10()。这两种做法将在绘图区域生成完全相同的结果,但坐标轴和刻度标签却是不同的。如果使用变换后的标度,坐标轴将按照原始的数据空间进行标注;如果变换了数据,坐标轴将按照变换后的数据空间进行标注

在这两种情况下,变换均在计算统计摘要之前发生。若要在计算统计摘要之后实行变换,可以使用coord_trans()。参看线性坐标系统了解更多细节

日期和时间值基本上属于连续型,但在标注坐标轴时有着特殊的处理方式。ggplot2支持属于date类的日期值和属于POSIXct类的日期时间值:如果时间值是其它格式的,则需使用as.Date()或as.POSIXct()对其进行转换。scale_x_date()与scale_x_datetime(0的工作原理和scale_x_continuous()相似,但是有特殊的date_breaks和date_labels参数来控制与日期相关的单位

  1. date_breaks和date_minor_breaks()允许通过时间单元单位(年、月、星期、天、小时、分钟、秒)使用位置中断。例如,date_breaks = "2 weeks"在每两周之间放置一个刻度线标记
  2. date_labels使用与strptime()和format()中相同的格式化字符串来控制标签的展示方式
编码含义
%S秒(00-59)
%M分钟(00-59)
%l小时,12小时制(1-12)
%I小时,12小时制(01-12)
%p上午/下午
%H小时,24小时制(00-23)
%a缩写的周几(Mon-Sun)
%A全称的周几(Monday-Sunday)
%e某月中的某天(1-31)
%d某月中的某天(01-31)
%m以数值表示的月份(01-12)
%b缩写的月份(Jan-Dec)
%B全称的月份(January-December)
%y不含世纪的年份(00-99)
%Y含世纪的年份(0000-9999)

如果想展示像14/10/1979这样的日期,可用"%d/%m/%Y"字符串

base <- ggplot(economics, aes(date, psavert)) +
	geom_line(na.rm = TRUE) +
	labs(x = NULL, y = NULL)

base # 默认中断和标签
base + scale_x_date(date_labels = "%y", date_breaks = "5 years")

base + scale_x_date(limits = as.Date(c("2004-01-01", "2005-01-01")), date_labels = "%b %y", date_minor_breaks = "1 months")

base + scale_x_date(limits = as.Date(c("2004-01-01", "2004-06-01")), date_labels = "%m/%d", date_minor_breaks = "2 weeks")

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值