美文网首页R语言与统计分析数据科学与R语言
2021-10-07 ggplot2进行图形化操作之缩放

2021-10-07 ggplot2进行图形化操作之缩放

作者: 谢俊飞 | 来源:发表于2021-10-07 18:05 被阅读0次

    1. 控制图形范围

    控制图形范围的方法有3种:

    • 调整绘图所用数据;
    • 设置标度范围;
    • 在coord_cartesian()函数种设置xlim 和ylim参数值。

    用mpg数据演示:

    1. 先绘制完整的数据及拟合曲线
    > ggplot(mpg, mapping = aes(displ, hwy)) +
    +   geom_point(aes(color = class)) +
    +   geom_smooth() 
    `geom_smooth()` using method = 'loess' and formula 'y ~ x'
    
    image.png
    1. 调整绘图所用数据
    > 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采用全部数据拟合,数据量更多,拟合更加稳健。而过滤掉数据后,拟合则是在筛选数据的基础之上。

    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有所差异。

    1. 用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

    相比而言,设定标度范围适用性更广,还可以在跨页的图形中使用。

    相关文章

      网友评论

        本文标题:2021-10-07 ggplot2进行图形化操作之缩放

        本文链接:https://www.haomeiwen.com/subject/frjznltx.html