R语言数据可视化ggplot添加左右y轴绘制天猫双十一销售图

目录
  • 构造数据集
  • 绘制散点
  • 修改两坐标轴信息

本文是以天猫双十一销量与增长率为例,原始的数据可以参考上一篇文章:用 ggplot 重绘天猫双十一销售额图,这里不再作过多的介绍。

同时整个的天猫双十一的销售额数据分析可以关注:天猫双十一“数据造假”是真的吗?

老规矩,先上最终成果(两张图只是颜色的差别):

上图左边 y 轴表示增长率的刻度,右边 y 轴表示销售额的数据,我们将两者在同一张图上进行展现。其实将两个统计图在同一个坐标系中呈现不算是这个绘图的难点,其真正的难点在与刻度的变换以及坐标轴标签的设定。

下面我们开始一步一步来绘制出上图所示的图案~

构造数据集

构造数据集前,我们先看看数据:

年份 销售额 增长率
2009 0.5
2010 9.36 1772.00
2011 52 455.56
2012 191 267.31
2013 350 83.25
2014 571 63.14
2015 912 59.72
2016 1207 32.35
2017 1682 39.35
2018 2135 26.93
2019 2684 25.71

由于销售额与增长率都是近乎相同的量纲(单论数值看,都是在 0-3000 之间),所以我们在事先可以不对数据进行变换,变换为统一的尺度。但我想要在坐标轴上,增长率以百分比的形式显示,所以需要除以100,但增长率除以100之后,为了把我们的两个 y 轴变换到同一个尺度区间,所以销售额也需要随之除以100。(注意,这里的销售额除以100 可以不需要具体的实际意义,只是保证在图像上呈现效果美观即可,最后的实际区间我们可以通过修改坐标轴的刻度值实现。)

因此生成数据的代码如下:

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_overview <- data.frame(year = factor(year), sales = sales / 100, growth_rate = growth_rate / 100)

但经常使用 ggplot 童鞋可能知道,我们没有办法直接只用上述的数据在 ggplot 中进行绘制,需要进行一个变换,也就是将销售额与增长率并列,并且再加一列变量作为 index,具体操作我们可以使用管道数据处理的 package :tidyr。(具体的原因与使用方法可参见:tidyr+ggplot2多个变量分层展示)

library(tidyr)
dat_overview %>%
  gather(sales, growth_rate, key = "var", value = "value")

其结果如下:

   year         var      value
1  2009       sales  0.0050000
2  2010       sales  0.0936000
3  2011       sales  0.5200000
4  2012       sales  1.9100000
5  2013       sales  3.5000000
6  2014       sales  5.7100000
7  2015       sales  9.1200000
8  2016       sales 12.0700000
9  2017       sales 16.8200000
10 2018       sales 21.3500000
11 2019       sales 26.8400000
12 2009 growth_rate         NA
13 2010 growth_rate 17.7200000
14 2011 growth_rate  4.5555556
15 2012 growth_rate  2.6730769
16 2013 growth_rate  0.8324607
17 2014 growth_rate  0.6314286
18 2015 growth_rate  0.5971979
19 2016 growth_rate  0.3234649
20 2017 growth_rate  0.3935377
21 2018 growth_rate  0.2693222
22 2019 growth_rate  0.2571429

绘制散点

首先我们将数据框中的散点映射到图像中:

dat_overview %>%
  gather(sales, growth_rate, key = "var", value = "value") %>%
  ggplot(aes(x = year, y = value, col = var)) +
  geom_point(size = 3, alpha = 0.6)

这里我们使用的是管道数据的 ggplot 的绘制方法,所以数据集直接使用 %>% 连接即可,不需要写在 ggplot() 函数中。

同时关于绘图,上面只是修改了我们散点的尺寸与透明度:size = 3, alpha = 0.6,得到的绘图如下面所示。

这时候的图还是非常 吃藕 (chou) 的,下面我们再精雕细琢一些坐标的布局与名称。

修改两坐标轴信息

先直接上代码:

dat_overview %>%
  gather(sales, growth_rate, key = "var", value = "value") %>%
  ggplot(aes(x = year, y = value, col = var)) +
  geom_point(size = 3, alpha = 0.6) +
  scale_y_continuous("增长率", labels = scales::percent,
                     sec.axis = sec_axis(~ . * 100, name = "销售额 (亿元)")) +
  # scale_color_manual(labels = c("增长率", "销售额 (亿元)"), values = c("blue", "red")) +
  scale_color_discrete(labels = c("增长率", "销售额 (亿元)")) +
  labs(title = "2009 - 2019 年销售额与增长率", x = "年份") +
  theme(legend.position = "bottom",
        legend.title = element_blank(),
        plot.title = element_text(hjust = 0.5))

这里我们新添加了 scale_y_continuous(),这里是修改 y 轴的刻度,首先我们修改了 y 轴左轴的名称,为增长率,然后 label = scales::percent 表示将刻度上的数值以百分比的形式显示。

最后 sec.axis = sec_axis(~ . * 100, name = "销售额 (亿元)") 则是添加右侧 y 轴 (这里叫 scecond axis),刻度为原始刻度乘以100,这里乘以100是由于我们在生成销售额数据的时候,为了容易尺度范围,除以了100,同时添加右侧 y 轴的名称: "销售额 (亿元)"。

scale_color_discrete() 表示将我们的图例中的名称进行修改:英文改成中文。

也可以使用注释中的 scale_color_manual() 函数,同时修改名称与散点的颜色,这里添加了注释,需要的童鞋可以取消注释,同时将 scale_color_discrete() 打上注释。

接着我们再修改一些主题设置:legend.position = "bottom" 将我们图例的标签调整到底部。其它的设置都是一些常规操作,可以翻看前面的博文,这里就不进行细说了。

最后就能得到我们最终的成果!

以上就是R语言数据可视化ggplot添加左右y轴绘制天猫双十一销售额的详细内容,更多关于ggplot添加左右两边y轴的资料请关注我们其它相关文章!

(0)

相关推荐

  • R语言操作文件方法详解教程

    目录 1. 文件与文件夹列表的读取 2. 新建文件与文件夹 3. 文件与文件夹的删除 4. 查看文件与文件夹是否存在 小练习 由于最近在处理一些真实数据时涉及到嵌套的 .tar.gz 文件的解压,手动一个一个解压过于麻烦.可以使用 shell 脚本或者 bat 脚本来做,但想尝试使用 R 语言对其进行完全解压,这里就需要涉及到对文件与文件夹的一些操作. 网上已经有许多现有教程,这里参考了很多网上的代码,不过会尝试尽量写得更加详细. 整篇文章我们的测试目录结构如下(生成目录结构树,可以直接在当前路

  • python中用ggplot绘制画图实例讲解

    Python的绘图库也允许用户创建优雅的图形,本章给大家介绍的是关于ggplot绘制画图的技巧,ggplot2建立在grid系统上,这个系统不支持纹理.需要额外创建一堆数据,再基于这些数据构建一个geom_path图层,盖在柱图上才可以进行各种绘制,下面给大家详细讲解下怎么使用ggplot绘图. 简介: ggplot类是在plotnine中的,能够生成一个图形. 安装: pip install pandas plotnine csv文件加载到survs_df的数据框架: ggplot(survs

  • R语言绘图公式与变量对象混合拼接实现方法

    当我们在R中进行绘图时,如果涉及到数学或统计公式的展现,可以使用函数:expression(),并且与 paste() 结合可以非常轻松的展现出自己想要展示的公式.详细的相关内容可参考: R进行绘图时输出希腊字符.上标.下标及数学公式 但这样做会遇到一个问题,在我们想批量产生大量含有不同变量值的标题时,如果遇到变量与公式的混合输出,就没有办法将变量里面的值进行输出了(使用 do.call() 等函数均不行). 举个栗子,若 m <- 10000,n <- 2000,我们如何让这两个变量直接显示

  • R语言实现ggplot重绘天猫双十一销售额曲线图过程

    目录 Let's start 输入数据 粗略绘图 完善散点图 添加拟合曲线 在散点上添加销售额 删除不必要的背景线 终极美化 小作业 前一段时间,很多人被这张图刷屏了: 这张图的来源是一篇名为 "淘宝2009-2018年历年双11销售额数据造假" 的文章.图中散点为天猫双十一销售额数据,曲线为原作者拟合的回归线.乍一看散点完美地分布在曲线上,原作者便直接声称:"淘宝双十一销售额数据造假!不可能有这么完美的拟合!" 可事实真的是这样吗? 作为一个热爱画画的博主,我们先

  • R语言绘图时输出希腊字符上下标及数学公式实现方法

    目录 希腊字母 上下标 paste 一个复杂的例子 进阶 数学公式 通常在我们写论文时,所需要的统计图是非常严谨的,里面的希腊字符与上下脚标都必须要严格书写.因此在使用R绘图时,如何在我们目标图中使用希腊字符.上标.下标及一些数学公式呢?在本博客中我们会进行详细的说明. 后面我们都将以一个最简单的绘图为例,只是将其标题进行修改. 希腊字母 使用希腊字符.上标.下标及数学公式,都需要利用一个函数:expression(),具体使用方式如下: plot(cars) title(main = expr

  • R语言 使用ggplot2绘制好看的分组散点图

    我们以iris数据集为例,该数据集包括花萼的长度和宽度,花瓣的长度和宽度,以及物种,如下图: 本文我们要绘制不同物种下花萼的长度和宽度的分布情况,以及二者之间的相关性关系. 1. 首先载入ggplot2包, library(ggplot2) 2. 然后进行ggplot(data = NULL, mapping = aes(), ..., environment = parent.frame())绘制,在绘制中第一个参数是数据,第二个参数是数据映射,是绘制的全局变量,其中包含的参数有x,y,col

  • R语言数据可视化ggplot添加左右y轴绘制天猫双十一销售图

    目录 构造数据集 绘制散点 修改两坐标轴信息 本文是以天猫双十一销量与增长率为例,原始的数据可以参考上一篇文章:用 ggplot 重绘天猫双十一销售额图,这里不再作过多的介绍. 同时整个的天猫双十一的销售额数据分析可以关注:天猫双十一"数据造假"是真的吗? 老规矩,先上最终成果(两张图只是颜色的差别): 上图左边 y 轴表示增长率的刻度,右边 y 轴表示销售额的数据,我们将两者在同一张图上进行展现.其实将两个统计图在同一个坐标系中呈现不算是这个绘图的难点,其真正的难点在与刻度的变换以及

  • R语言数据可视化ggplot绘制置信区间与分组绘图技巧

    目录 1. 单组情况 1)构造数据集 2)绘制置信区间 2. 多组情况 方法1 1)构造数据集 2)绘制置信区间 方法2 1)构造数据集 2)绘制置信区间 3)美化 1. 单组情况 1)构造数据集 x <- 1:10 y <- x^2 ci_l <- x^2 - 0.5 * x ci_r <- x^2 + 0.5 * x dat_plot <- data.frame(x, y, ci_l, ci_r) 数据集长下面这样: x y ci_l ci_r 1 1 1 0.5 1.5

  • R语言数据可视化分析天猫双十一销售额增长率

    目录 最近和小伙伴一起探索了一下双十一后闹得沸沸扬扬的一篇文章:"淘宝2009-2018年历年双十一销售额数据造假".原文作者使用初中阶段学过的抛物线,就将每年的销售额增长趋势拟合得非常完美. (如果大家想学习如何画出上述的图像,可参见前面一篇博客:用 ggplot 重绘天猫双十一销售额图) 同时在知乎上,这个问题也成功上了当时的热搜榜,各路大神云集,也发表了很多很有意思的观点: 如何看待有人质疑淘宝双十一数据造假,并在4月份成功预测今年销售额为2680亿? 看了很多大神的文章后,自己

  • R语言数据可视化绘图Dot plot点图画法示例

    目录 Step1. 绘图数据的准备 Step2. 绘图数据的读取 Step3.绘图所需package的安装.调用 Step4.绘图 添加平均值 添加误差线 今天要给大家介绍的是点图(Dot plot),点图展示的数据比较简单,但胜在好看啊. 作图数据如下: Step1. 绘图数据的准备 首先要把你想要绘图的数据调整成R语言可以识别的格式,建议大家在excel中保存成csv格式. Step2. 绘图数据的读取 data<-read.csv("your file path", hea

  • R语言数据可视化包ggplot2画图之散点图的基本画法

    目录 前言 下面以一个简单的例子引入: 首先介绍第一类常用的图像类型:散点图 给原始数据加上分类标签: 按z列分类以不同的颜色在图中画出散点图: 按z列分类以不同的形状在图中画出散点图: 多面化(将ABC三类分开展示): 自定义颜色: 添加拟合曲线: 更换主题 : 总结 前言 ggplot2的功能很强大,并因为其出色的画图能力而闻名,下面来介绍一下它的基本画图功能,本期介绍散点图的基本画法. 在ggplot2里,所有图片由6个基本要素组成: 1. 数据(Data) 2. 层次(Layers),包

  • R语言数据可视化学习之图形参数修改详解

    1.图形参数的修改par()函数 我们可以通过使用par()函数来修改图形的参数,其调用格式为par(optionname=name, optionname=name,-).当par()不加参数时,返回当前图形参数设置的列表:par(no.readonly=T)将生成一个可以修改当前参数设置的列表.注意以这种方式修改参数设置,除非参数再次被修改,否则一直执行此参数设置. 例如现在想画出mtcars数据集中mpg的折线图,并用虚线代替实线,并将两幅图排列在同一幅图里,代码及图形如下: > opar

  • R语言数据可视化绘制Circular bar plot实现环形柱状图

    目录 Step1. 绘图数据的准备 Step2. 绘图数据的读取 Step3.绘图所需package的调用 Step4.绘图 环形柱状图 排好序的环形柱状图 调整颜色 注意事项 不知不觉,距离小仙上次发文已经过去五个多月了.R语言作图系列的更新频率跟理想中的一月一次差别有点忒大了,不得不让小仙陷入深深的反思,对于时间的规划也有了一些新的感悟.不知道大家有没有跟我一样的感受啊,举些例子:放学.下班或者放假之后先把学习任务扔在一边,心想着,我先玩会游戏,等会玩够了再做:网上看到一篇干货满满的文章,先

  • R语言数据可视化绘图Slope chart坡度图画法

    目录 Step1. 绘图数据的准备 Step2. 绘图数据的读取 Step3. 绘图所需package的安装.调用 Step4. 绘图 今天小仙给大家分享一下Slope chart(坡度图)的画法,我在paper中看到的图是这样的 这个图的意思大概是Nasal Tissue比Brochial Tissue的ACE2表达量高(ACE2就是新冠病毒的受体啦) .为了复刻这张图,小仙捏造了一组差不多的数据,竟然感觉比原图好看! 废话不多说,进入正题. Step1. 绘图数据的准备 首先要把你想要绘图的

  • R语言数据可视化tidyr与ggplot2多个变量分层展示举例实现

    目录 每个变量的密度分布情况 思考 tidyr ggplot2进行绘图 在R语言普通的绘图中,使用par()参数可以在一张图上实现不同变量的子图.如果我们想要用ggplot2实现,则需要整理我们的原始数据,这通常是非常麻烦的,这时就需要用到我们的tidyr来帮助我们绘图. 可能说上面一段话不是很容易理解,下面我们来举个栗子. 每个变量的密度分布情况 y1 <- rnorm(20) y2 <- rnorm(20) dat <- data.frame(y1, y2) 现有的数据集: y1 y

  • R语言数据可视化绘图bar chart条形图实现示例

    时光飞逝,岁月如梭,转眼又是一年过去了,本小仙怎么还是一事无成呢! 转念一想,这种事也不是一次两次了,再多一个又何妨,哈哈! 回归正题,今天就给大家介绍下直方图(histogram)的“好兄弟”——条形图(bar chart).假设小仙同学现在要帮一家书店用图形展示2018年最受大家欢迎的书目,数据如下图. 条形图画出来还挺好看,可是跟小仙想象中的可不一样.明明我的数据是按照销量从高到低排列的,为什么画出来却是按照字母顺序排列的呢? 使用了对因子进行排序的函数reorder()之后,就变成了下图

随机推荐