1. 控制图形范围
控制图形范围的方法有3种:
- 调整绘图所用数据;
- 设置标度范围;
- 在coord_cartesian()函数种设置xlim 和ylim参数值。
用mpg数据演示:
- 先绘制完整的数据及拟合曲线
> ggplot(mpg, mapping = aes(displ, hwy)) +
+ geom_point(aes(color = class)) +
+ geom_smooth()
`geom_smooth()` using method = 'loess' and formula 'y ~ x'
image.png
- 调整绘图所用数据
> mpg %>%
+ filter(displ >= 5, displ <= 7, hwy >= 10, hwy <= 30) %>%
+ ggplot(aes(displ, hwy)) +
+ geom_point(aes(color = class)) +
+ geom_smooth()
`geom_smooth()` using method = 'loess' and formula 'y ~ x'
image.png
可以明显看到,筛选到所展示的数据部分,拟合曲线发生了变化,置信区间也比图1的要宽很多。因为图1采用全部数据拟合,数据量更多,拟合更加稳健。而过滤掉数据后,拟合则是在筛选数据的基础之上。
- 设置标度范围
> ggplot(mpg, mapping = aes(displ, hwy)) +
+ geom_point(aes(color = class)) +
+ geom_smooth() +
+ xlim(c(5, 7))+
+ ylim(c(10, 30))
`geom_smooth()` using method = 'loess' and formula 'y ~ x'
Warning messages:
1: Removed 196 rows containing non-finite values (stat_smooth).
2: Removed 196 rows containing missing values (geom_point).
# 等同于
> ggplot(mpg, mapping = aes(displ, hwy)) +
+ geom_point(aes(color = class)) +
+ geom_smooth() +
+ scale_x_continuous (limits= c(5,7)) +
+ scale_y_continuous(limits = c(10, 30))
`geom_smooth()` using method = 'loess' and formula 'y ~ x'
Warning messages:
1: Removed 196 rows containing non-finite values (stat_smooth).
2: Removed 196 rows containing missing values (geom_point).
image.png
标度的范围设置是对数据取子集,然后再重新拟合曲线。但是在class分类中仍然保留了所有的类别,所以图例与纯filter有所差异。
- 用coord_cartesian()函数缩放(坐标系范围设置)
> ggplot(mpg, mapping = aes(displ, hwy)) +
+ geom_point(aes(color = class)) +
+ geom_smooth() +
+ coord_cartesian(xlim = c(5, 7), ylim = c(10, 30))
`geom_smooth()` using method = 'loess' and formula 'y ~ x'
image.png
可以看出,这里的图像就是原图的局部放大,拟合曲线也没有发生变化,仍然表现的是整体数据的拟合线。坐标系的放缩就是图像的放缩。
所以在对局部数据进行缩放时,采用coord_cartesian()函数非常的关键。
2. 同一标度
在进行数据分组展示时候,容易出现坐标轴不统一,直接影响了两者的直观对比效果,这时候就需要再不同图形间使用相同的标度。
> suv <- mpg %>% filter(class == "suv")
> compact <- mpg %>% filter(class == "compact")
> ggplot(suv, aes(displ, hwy, colour = drv)) +
+ geom_point()
> p1 <- ggplot(suv, aes(displ, hwy, colour = drv)) +
+ geom_point()
> p2 <- ggplot(compact, aes(displ, hwy, colour = drv)) +
+ geom_point()
> library(ggpubr)
> ggarrange(p1, p2,
+ labels = c("A","B"),nrow = 1)
image.png
解决这一问题的一种办法是,先使用全部数据找出标的limits,然后在两张图形中使用同样的表达。
> x_scale <- scale_x_continuous(limits = range(mpg$displ))
> y_scale <- scale_y_continuous(limits = range(mpg$hwy))
> col_scale <- scale_color_discrete(limits = unique(mpg$drv))
> p3 <- ggplot(suv, aes(displ, hwy, color = drv)) +
+ geom_point() +
+ x_scale +
+ y_scale +
+ col_scale
> p4 <- ggplot(compact, aes(displ, hwy, color = drv)) +
+ geom_point() +
+ x_scale +
+ y_scale +
+ col_scale
> ggarrange(p3, p4,
+ labels = c("A","B"),nrow = 1)
image.png
对于这个特定的例子,也可以通过分面解决;
> mpg %>%
+ filter(class == c("suv", "compact")) %>%
+ ggplot(aes(displ, hwy, color = drv)) +
+ geom_point() +
+ facet_grid(.~ class)
image.png
相比而言,设定标度范围适用性更广,还可以在跨页的图形中使用。
网友评论