服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - R语言 - R语言使用ggplot绘制画中画细节放大的方法

R语言使用ggplot绘制画中画细节放大的方法

2022-01-19 13:34Kanny广小隶 R语言

这篇文章主要为大家介绍了R语言使用ggplot绘制画中画细节放大的方法实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步

当我们在利用ggplot绘图时,当遇到一些量纲相差过大,或者一些图的某些点排布密集时,需要将细节部分进行放大,这时我们就需要采用画中画的方式,或者将统计图的细节在旁边进行放大。

下面我们就来一步一步讲解如何将图中的细节进行放大(核心为ggforce包)。话不多说,先上最终效果图(以2019年双十一数据拟合为例):

R语言使用ggplot绘制画中画细节放大的方法

 

1. 载入相关包

library(ggplot2)  # 绘图核心
library(tidyr)    # 数据整理
library(ggforce)  # 画中画核心包

 

2. 数据生成

我们收集了双十一销量数据,并进行一些处理,这里生成数据相对比较简单,就不进行解释了。

# generate data
year <- 2009:2019
sales <- c(0.5, 9.36, 52, 191, 350, 571, 912, 1207, 1682, 2135, 2684)
growth_rate <- c(NA, diff(sales) / sales[1:(length(sales) - 1)] * 100)
dat <- data.frame(year = factor(year), sales, growth_rate)

# fit the curve of data
dat_curve <- data.frame(year_std = 1:10, growth_rate = growth_rate[2:11] / 100)
dat_curve$ind <- factor(c(rep(x = 1, 9), 2))

生成的数据长下面这样:

 year_std growth_rate ind
1         1  17.7200000   1
2         2   4.5555556   1
3         3   2.6730769   1
4         4   0.8324607   1
5         5   0.6314286   1
6         6   0.5971979   1
7         7   0.3234649   1
8         8   0.3935377   1
9         9   0.2693222   1
10       10   0.2571429   2

 

3. 基础绘图

首先我们添加一些散点(geom_point),与拟合曲线(geom_smooth),并将2019年与历年区别开,代码如下:

dat_curve %>%
ggplot(aes(x = year_std, y = growth_rate, col = ind)) +
geom_smooth(se = FALSE, method = "gam", formula = y ~ I(x^(-2)), size = 2, col = "#b3cde3") +
geom_point(size = 4, alpha = 0.8)

R语言使用ggplot绘制画中画细节放大的方法

接着我们发现,在后面段这些散点在增长率上的差异看不出来了,因此需要使用画中画的方法,来对这部分进行放大。

 

4. 放大效果

其实非常简单facet_zoom(y = growth_rate < 1),我们选取增长率小于1的部分进行放大即可:

dat_curve %>%
ggplot(aes(x = year_std, y = growth_rate, col = ind)) +
geom_smooth(se = FALSE, method = "gam", formula = y ~ I(x^(-2)), size = 2, col = "#b3cde3") +
geom_point(size = 4, alpha = 0.8) +
facet_zoom(y = growth_rate < 1)

R语言使用ggplot绘制画中画细节放大的方法

 

5. 绘图美化

最后,我们再添加一些代码进行美化即可!(美化的代码可以在我其他的博客中找到具体的解释哦)

dat_curve %>%
ggplot(aes(x = year_std, y = growth_rate, col = ind)) +
geom_smooth(se = FALSE, method = "gam", formula = y ~ I(x^(-2)), size = 2, col = "#b3cde3") +
geom_point(size = 4, alpha = 0.8) +
labs(title = expression(paste('年份与销售额增长率拟合 (', R^2, " = 0.9978)")), x = "年份", y = "销售额增长率") + # 混合公式与中文,可参考本人另外的博客,相关的说明。
xlim(0, 10) +
scale_y_continuous(labels = scales::percent) +   # y轴刻度改为百分数
scale_x_continuous(breaks = 1:10, labels = 2010:2019) +
scale_fill_manual(values = c('#fbb4ae', '#ccebc5')) +
theme_bw(base_family = "Times") +
theme(axis.text.x = element_text(angle = 30), # x轴刻度倾斜30度
      panel.grid.minor = element_blank(),
      legend.position = "none",
      text = element_text(family = "STHeiti"),
      plot.title = element_text(hjust = 0.5)) +
facet_zoom(y = growth_rate < 1)

R语言使用ggplot绘制画中画细节放大的方法

 

其他方法

其他几种ggplot绘制画中画的方法:

It is possible to create inset graphs?

Plots within plots with ggplot2 and ggmap

之后有时间我会补充另外一些利用ggplot进行画中画绘图的方法(觉得目前的绘制方式最好看且很简单,因此先讲解本博文中的方法)。

以上就是R语言使用ggplot绘制画中画细节放大的方法的详细内容,更多关于ggplot绘制画中画细节放大的资料请关注服务器之家其它相关文章!

原文链接:https://kanny.blog.csdn.net/article/details/106558875

延伸 · 阅读

精彩推荐
  • R语言R语言常量知识点总结

    R语言常量知识点总结

    在本篇文章里小编给大家整理了一篇关于R语言常量知识点总结内容,有兴趣的朋友们可以学习分享下。...

    R语言教程网12102021-12-29
  • R语言R语言中qplot()函数的用法说明

    R语言中qplot()函数的用法说明

    这篇文章主要介绍了R语言中qplot()函数的用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    Jack_丁明12752022-01-05
  • R语言R语言实现支持向量机SVM应用案例

    R语言实现支持向量机SVM应用案例

    本文主要介绍了R语言实现支持向量机SVM应用案例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    一天_pika5222022-01-18
  • R语言如何用R语言绘制散点图

    如何用R语言绘制散点图

    这篇文章主要介绍了如何用R语言绘制散点图,帮助大家更好的理解和学习使用R语言,感兴趣的朋友可以了解下...

    菜鸟教程13002021-12-23
  • R语言R语言gsub替换字符工具的具体使用

    R语言gsub替换字符工具的具体使用

    这篇文章主要介绍了R语言gsub替换字符工具的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友...

    lztttao10372021-12-24
  • R语言R语言读取xls与xlsx格式文件过程

    R语言读取xls与xlsx格式文件过程

    这篇文章主要为大家介绍了使用R语言读取xls与xlsx格式文件的过程步骤,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪...

    Kanny广小隶11982022-01-20
  • R语言基于R/RStudio中安装包“无法与服务器建立连接”的解决方案

    基于R/RStudio中安装包“无法与服务器建立连接”的解决方案

    这篇文章主要介绍了基于R/RStudio中安装包“无法与服务器建立连接”的解决方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    truffle52815052022-01-05
  • R语言R语言中的vector(向量),array(数组)使用总结

    R语言中的vector(向量),array(数组)使用总结

    这篇文章主要介绍了R语言中的vector(向量),array(数组)使用总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要...

    A叶子叶来5772021-11-14