离散变量的position scales设置中的limits/breaks/labels
离散变量的默认position scale函数是scale_*_discrete()
。
- 离散变量是如何映射到位置坐标轴上的?
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)
- 离散型变量中各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"))
-
limits
、breaks
和labels
参数是如何使用的?
-
limits
:字符串向量,对应的值默认是离散型变量中的唯一值的集合,另外也可通过调整向量中值的顺序调整categroies的顺序 -
breaks
:默认是与limits
相同的字符串向量,可以手动设置为其子集,效果是仅子集中的值有labels,子集外的值无labels(有breaks) -
labels
:可手动设置为字符串向量(长度必须与breaks
相同),如果向量是命名向量,则labels被替换成值的名字;label_wrap()
函数可以将长lables换行