iis服务器助手广告
返回顶部
首页 > 资讯 > 精选 >R语言如何实现ggplot重绘天猫双十一销售额曲线图
  • 817
分享到

R语言如何实现ggplot重绘天猫双十一销售额曲线图

2023-06-25 12:06:39 817人浏览 安东尼
摘要

这篇文章主要介绍了R语言如何实现ggplot重绘天猫双十一销售额曲线图,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前一段时间,很多人被这张图刷屏了:这张图的来源是一篇名为

这篇文章主要介绍了R语言如何实现ggplot重绘天猫双十一销售额曲线图,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

前一段时间,很多人被这张图刷屏了:

R语言如何实现ggplot重绘天猫双十一销售额曲线图

这张图的来源是一篇名为 “淘宝2009-2018年历年双11销售额数据造假” 的文章。图中散点为天猫双十一销售额数据,曲线为原作者拟合的回归线。乍一看散点完美地分布在曲线上,原作者便直接声称:“淘宝双十一销售额数据造假!不可能有这么完美的拟合!” 可事实真的是这样吗?

作为一个热爱画画的博主,我们先不来考虑这个问题,直接来试着在 R 中绘制出上图,一个更好看版本的上图。

Let's start

温馨小提示:在这篇博客中,你可以学会下述 ggplot 的绘图小技巧:

如何在图像中拟合二次曲线;

如何在图像中添加文本或自适应地添加文本;

如何删除一些不必要的背景线;

还有一些常规操作:换主题、改刻度、改颜色等等… …

偷偷放个最终成果:

R语言如何实现ggplot重绘天猫双十一销售额曲线图

输入数据

首先我们查到具体每一年的天猫销售额数据,然后在 R 中构建 data frame.

year <- 2009:2019sales <- c(0.5, 9.36, 52, 191, 350, 571, 912, 1207, 1682, 2135, 2684)dat_sales <- data.frame(year = year, sales = sales)

由于我们想重点凸显出 2019 年的具体表现,所以我们还需要添加一列 index 表示是否为 2019 年(非 2019 年为 1, 2019 年为 2):

dat_sales$ind <- factor(c(rep(x = 1, 10), 2))

数据框长着如下这样:

   year   sales ind1  2009    0.50   12  2010    9.36   13  2011   52.00   14  2012  191.00   15  2013  350.00   16  2014  571.00   17  2015  912.00   18  2016 1207.00   19  2017 1682.00   110 2018 2135.00   111 2019 2684.00   2

好啦,有了上述数据框,我们就可以开始进行 ggplot 的绘图了!

粗略绘图

首先我们就用默认参数画出散点变化趋势,同时 2019 年标注出不一样的颜色:

library(ggplot2)ggplot(dat = dat_sales) +  geom_point(aes(x = year, y = sales, col = ind))

R语言如何实现ggplot重绘天猫双十一销售额曲线图

但是这样的绘图有很多问题:缺少标题,坐标轴的标题改中文,x 轴的显示不是离散的年份,散点过小,图例问题等等问题,我们先一步一步来进行完善。

完善散点图

ggplot(dat = dat_sales) +  geom_point(aes(x = year, y = sales, col = ind), size = 4) +  scale_x_continuous(breaks = 2009:2019, labels = 2009:2019) +  labs(title = "2009 - 2019 年销售额", x = "年份", y = "销售额 (亿元)") +  theme(legend.position = "none",        plot.title = element_text(hjust = 0.5))

R语言如何实现ggplot重绘天猫双十一销售额曲线图

其中,size = 4, 表示将散点进行放大,具体的尺寸可以自己进行设置; breaks = 2009:2019 表示原本数据集中在 x 轴上对应的值; labels = 2009:2019 表示映射到图像上 x 轴的值; legend.position = "none"表示取消 legend 显示。

强调:这里为了显示年份,其实可以采用将年份转换成 factor 型的方法,但由于我们还需要使用年份数据进行曲线拟合,若转化成 factor 会使得曲线拟合失败,因此我们采用稍微复杂一些的修改 x 轴刻度的方法。

添加拟合曲线

下面我们就开始添加二次函数拟合曲线:

ggplot(dat = dat_sales) +  geom_point(aes(x = year, y = sales, col = ind), size = 4) +  geom_smooth(aes(x = year, y = sales), se = FALSE, method = "lm", fORMula = y ~ x + I(x^2), size = 2) +  scale_x_continuous(breaks = 2009:2019, labels = 2009:2019) +  labs(title = "2009 - 2019 年销售额", x = "年份", y = "销售额 (亿元)") +  theme(legend.position = "none",        plot.title = element_text(hjust = 0.5))

R语言如何实现ggplot重绘天猫双十一销售额曲线图

ggplot 中通常都是使用 geom_smooth 来进行曲线或者直线的拟合,对于线性、二次、三次函数,我们都是使用 method = "lm"; se = FALSE 表示不显示置信区间; formula = y ~ x + I(x^2) 表示使用二次函数进行拟合; 最后的 size = 2 表示调整线的粗细。

在散点上添加销售额

可以发现,这样的曲线只能看出趋势,但是却看不出每年的具体销售额,所以接下来我们尝试在图像的每个散点加上具体的销售额:

# library(ggrepel)ggplot(dat = dat_sales) +  geom_point(aes(x = year, y = sales, col = ind), size = 4) +  geom_smooth(aes(x = year, y = sales), se = FALSE, method = "lm", formula = y ~ x + I(x^2), size = 2) +  geom_text(aes(x = year, y = sales, label = sales), hjust = 0.5, vjust = -1) +  # geom_text_repel(aes(x = year, y = sales, label = sales)) +  ylim(0, 3000) +  scale_x_continuous(breaks = 2009:2019, labels = 2009:2019) +  labs(title = "2009 - 2019 年销售额", x = "年份", y = "销售额 (亿元)") +  theme(legend.position = "none",        plot.title = element_text(hjust = 0.5))

R语言如何实现ggplot重绘天猫双十一销售额曲线图

当我们需要在绘图中添加文本时,通常可以使用 geom_text 函数,然后 aes(label = ) 中设定需要显示的变量名称,最后的 hjust = 0.5, vjust = -1 表示调整显示的相对位置,前者表示水平位置,后者表示垂直位置,这个根据绘图的不同需要自己进行手动调整。

同时,2019 年的销售额较高,如果不调整 y 轴的显示范围,最上面显示的销售额 2684 会被遮挡,所以我们添加了 ylim(0, 3000)

另外,细心的童鞋一定发现了,我们在代码中添加了两行注释,注释的内容同样是添加文本的语句: geom_text_repel(aes(x = year, y = sales, label = sales)),这个语句可以自适应地调整每个文本显示内容,使文本不会挡住我们的散点和曲线,这个函数在包 ggrepel 中。这里之所以是因为这个方式大多用于图像中散点比较多,比较乱的情况,如果在此幅图中使用,会使得销售额的文本显示略显混乱。

删除不必要的背景线

再细心一些的童鞋可能观察到了,背景的网格图,在 x 轴每两个年份之间都有一根垂直线,这个垂直线是毫无意义的。这时我们不禁要问,是否有方法能够将这根线消去呢?

答案是肯定的:

ggplot(dat = dat_sales) +  geom_point(aes(x = year, y = sales, col = ind), size = 4) +  geom_smooth(aes(x = year, y = sales), se = FALSE, method = "lm", formula = y ~ x + I(x^2), size = 2) +  geom_text(aes(x = year, y = sales, label = sales), hjust = 0.5, vjust = -1) +  ylim(0, 3000) +  scale_x_continuous(breaks = 2009:2019, labels = 2009:2019) +  labs(title = "2009 - 2019 年销售额", x = "年份", y = "销售额 (亿元)") +  theme(panel.grid.minor = element_blank(),        legend.position = "none",        plot.title = element_text(hjust = 0.5))

R语言如何实现ggplot重绘天猫双十一销售额曲线图

修改起来其实也不难,可以发现,每个年份对应的垂直线叫做 major,而年份没对应到的网格线叫做 minor,因此我们直接在 theme 中添加 panel.grid.minor = element_blank() 即可。

终极美化

到这里,我们的基本元素的拼凑已经告一段落了,但是整体图看起来依旧是不够美观,所以接下来我们再进行一些操作来美化绘图,最终代码与结果如下:

ggplot(dat = dat_sales, aes(x = year, y = sales)) +  geom_smooth(se = FALSE, method = "lm", formula = y ~ x + I(x^2), size = 2, col = "#b3cde3") +  geom_point(aes(col = ind), size = 4) +  ylim(0, 3000) +  geom_text(aes(label = sales), hjust = 0.5, vjust = -1) +  scale_x_continuous(breaks = 2009:2019, labels = 2009:2019) +  labs(title = "2009 - 2019 年销售额", x = "年份", y = "销售额 (亿元)") +  theme_bw(base_family = "Times") +  theme(legend.position = "none",        panel.grid.minor = element_blank(),        panel.border = element_blank(),        plot.title = element_text(hjust = 0.5))

R语言如何实现ggplot重绘天猫双十一销售额曲线图

这里其实做了一些细节的调整,首先先绘制拟合曲线,再绘制散点,这样散点就会在曲线的上方,这样看起来会更加的美观。其次改变了拟合曲线的颜色:col = "#b3cde3",改变了绘图的主题:theme_bw(base_family = "Times"),删除了丑丑的边框:panel.border = element_blank()

至此,我们美美的绘图重构就完成了!

感谢你能够认真阅读完这篇文章,希望小编分享的“R语言如何实现ggplot重绘天猫双十一销售额曲线图”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网精选频道,更多相关知识等着你来学习!

--结束END--

本文标题: R语言如何实现ggplot重绘天猫双十一销售额曲线图

本文链接: https://www.lsjlt.com/news/304990.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • R语言如何实现ggplot重绘天猫双十一销售额曲线图
    这篇文章主要介绍了R语言如何实现ggplot重绘天猫双十一销售额曲线图,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前一段时间,很多人被这张图刷屏了:这张图的来源是一篇名为 ...
    99+
    2023-06-25
  • R语言实现ggplot重绘天猫双十一销售额曲线图过程
    目录Let's start输入数据粗略绘图完善散点图添加拟合曲线在散点上添加销售额删除不必要的背景线终极美化小作业前一段时间,很多人被这张图刷屏了: 这张图的来源是一篇名为 “淘宝...
    99+
    2024-04-02
  • R语言数据可视化ggplot添加左右y轴绘制天猫双十一销售图
    目录构造数据集绘制散点修改两坐标轴信息本文是以天猫双十一销量与增长率为例,原始的数据可以参考上一篇文章:用 ggplot 重绘天猫双十一销售额图,这里不再作过多的介绍。 同时整个的天...
    99+
    2024-04-02
  • R语言如何实现数据可视化分析天猫双十一销售额增长率
    这篇文章给大家分享的是有关R语言如何实现数据可视化分析天猫双十一销售额增长率的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。(如果大家想学习如何画出上述的图像,可参见前面一篇博客:用 ggplot 重绘天猫双十一销...
    99+
    2023-06-25
  • R语言数据可视化分析天猫双十一销售额增长率
    最近和小伙伴一起探索了一下双十一后闹得沸沸扬扬的一篇文章:“淘宝2009-2018年历年双十一销售额数据造假”。原文作者使用初中阶段学过的抛物线,就将每年的销售额增长趋势拟合得非常完...
    99+
    2024-04-02
  • r语言中如何用ggplot绘制曲线图
    要在R语言中使用ggplot绘制曲线图,您需要先安装并加载ggplot2包。然后您可以使用ggplot函数来创建一个绘图对象,并使用...
    99+
    2024-04-02
  • R语言逻辑回归、ROC曲线与十折如何实现交叉验证
    本篇内容主要讲解“R语言逻辑回归、ROC曲线与十折如何实现交叉验证”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“R语言逻辑回归、ROC曲线与十折如何实现交叉验证”吧!1. 测试集和训练集3、7分...
    99+
    2023-06-08
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作