13. ggplot2中离散数据的坐标轴映射

离散变量的position scales设置中的limits/breaks/labels
离散变量的默认position scale函数是scale_*_discrete()

  1. 离散变量是如何映射到位置坐标轴上的?
    ggplot将每个category映射为一个整数值,然后在对应坐标位置上绘制几何图形(geom)。,从如下实例可以看到,7个class映射为整数1~7:
ggplot(mpg, aes(x = hwy, y = class)) + 
  geom_point() +
  annotate("text", x = 5, y = 1:7, label = 1:7)
  1. 离散型变量中各categories的顺序是怎么控制的?如何自定义?
    对连续型变量,直接根据其值在对应坐标位置上绘制几何图形,不需要考虑值的顺序问题。对离散型变量,应是通过因子化这种方式来确定顺序的。
    有多种方式来控制离散数据中categories的顺序:
  • 在绘图之前先将离散型变量因子化:通过factor()levels参数控制顺序,例如:
df1 <- df <- data.frame(x=LETTERS[1:5],y=1+rnorm(5))
p1 <- ggplot(df,aes(x,y)) + geom_col()

# 通过levels设置顺序
df1$x <- factor(df1$x,levels=c("E","D","C","B","A"))
p2 <- ggplot(df1,aes(x,y)) + geom_col()

# reorder()根据另一个变量的值对离散型变量进行排序
ggplot(mpg, aes(reorder(manufacturer, cty), cty)) + geom_point()
  • 通过position scale函数中的limits参数控制顺序,例如:
# p3与p2等价
p3 <- ggplot(df,aes(x,y)) + geom_col() + scale_x_discrete(limits=c("E","D","C","B","A"))
  1. limitsbreakslabels参数是如何使用的?
  • limits:字符串向量,对应的值默认是离散型变量中的唯一值的集合,另外也可通过调整向量中值的顺序调整categroies的顺序
  • breaks:默认是与limits相同的字符串向量,可以手动设置为其子集,效果是仅子集中的值有labels,子集外的值无labels(有breaks)
  • labels:可手动设置为字符串向量(长度必须与breaks相同),如果向量是命名向量,则labels被替换成值的名字;label_wrap()函数可以将长lables换行
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容