R语言可视化——ggplot图表中的线条

今天跟大家分享的是ggplot图表中的一类重要元素——线条。

不要觉得专门为线条写一章推送有点小题大做,其实线条对于图表而言,功不可没,即便是不起眼的网格、轴线、或者线条的粗线、线型、磅数等都将决定着你的图表品质。

R语言中ggplot函数系统中涉及到线条的地方有很多,最常见的场景就是我们做geom_line()(折线图)、geom_path()(路径图),以及图表的绘图区(panel)、图表区、网格系统(grid)中所涉及到的线条。

今天以一个折线图为例,简要说明ggplot函数中关于线条的主要参数及其效果。

library(ggplot2)
library(reshape2)
library(ggthemes)
library(RColorBrewer)
data<-data.frame(Name = c("苹果","谷歌","脸书","亚马逊","腾讯"),Company = c("Apple","Google","Facebook","Amozon","Tencent"),Sale2013 = c(5000,3500,2300,2100,3100),Sale2014 = c(5050,3800,2900,2500,3300),Sale2015 = c(5050,4000,3200,2800,3700),Sale2016 = c(6000,4800,4500,3500,4300))
mydata<-melt(data,id.vars=c("Name","Company"),variable.name="Year",value.name="Sale")

我先用一个简单的折线图代码跑出来一个折线图:

ggplot(mydata,aes(Company,Sale,fill=Year))+geom_line()

geom_path: Each group consists of only one observation. Do you need to adjust the group aesthetic?

当我用以上代码运行的时候,软件报错,提示如上:

图表展示区给出了一个只有坐标系的空白图表;

相信根据英文意思也可以明白怎么回事,因为我们给折线图的X轴映射是一个离散的因子变量,而默认状态下软件会将单条记录都会视作一个分类,这样肯定是无法出来图表的,而如果是一个连续变量,则会只会当做一个类别进行映射。

我们使用过ggplot内内置数据集验证我们的猜想。

head(LakeHuron)

LakeHuron$data<-seq(1875,1972,1)

ggplot(LakeHuron,aes(data,LakeHuron))+geom_line()

以上使用了一个时间序列数据,很顺利的完成了折线图的制作。

那么针对离散变量的折线图到底如何来做呢,我们可以通过group指定分组的形式来达到目的。

ggplot(mydata,aes(Company,Sale,group=Year,fill=Year))+geom_line()

通过指定group即告知软件将变量按照年份变量分组,否则单个不重复记录都会被当做一个单独分组。

ggplot(newdata,aes(Company,Sale,group=Year))+geom_line()+geom_point()

ggplot(newdata,aes(Company,Sale,group=Year,colour=Year))+geom_line()+geom_point() #按照年份分组的同时按照年份进行线条的颜色映射

接下来通过对线条内部参数的修改,我们可以体会到ggplot对于线条细节的把控是多么的专注:

ggplot(newdata,aes(Company,Sale,group=Year,colour=Year))+geom_line()+geom_point()

线条的参数主要有size、colour、linetype.

其中线条的类型主要有0=blank,1=solid,2=dashed,3=dotted,4=dotdash,5=longdash,6=twodash

每一个类型示例如下:

ggplot(newdata,aes(Company,Sale,group=Year,colour=Year))+geom_line()+geom_point() 
ggplot(newdata,aes(Company,Sale,group=Year,colour=Year))+geom_line(linetype=1,size=1.5)+geom_point()
ggplot(newdata,aes(Company,Sale,group=Year,colour=Year))+geom_line(linetype=2,size=1.5)+geom_point()
ggplot(newdata,aes(Company,Sale,group=Year,colour=Year))+geom_line(linetype=3,size=1.5)+geom_point()
ggplot(newdata,aes(Company,Sale,group=Year,colour=Year))+geom_line(linetype=4,size=1.5)+geom_point()
ggplot(newdata,aes(Company,Sale,group=Year,colour=Year))+geom_line(linetype=5,size=1.5)+geom_point()
ggplot(newdata,aes(Company,Sale,group=Year,colour=Year))+geom_line(linetype=6,size=1.5)+geom_point()

下面是关于线条粗度的不同感知:

ggplot(newdata,aes(Company,Sale,group=Year,colour=Year))+geom_line(size=1,linetype=1)+geom_point() 
ggplot(newdata,aes(Company,Sale,group=Year,colour=Year))+geom_line(size=2,linetype=1)+geom_point()
ggplot(newdata,aes(Company,Sale,group=Year,colour=Year))+geom_line(size=3,linetype=1)+geom_point()
ggplot(newdata,aes(Company,Sale,group=Year,colour=Year))+geom_line(size=4,linetype=1)+geom_point()
ggplot(newdata,aes(Company,Sale,group=Year,colour=Year))+geom_line(size=5,linetype=1)+geom_point()
ggplot(newdata,aes(Company,Sale,group=Year,colour=Year))+geom_line(size=6,linetype=1)+geom_point()

以上依次使用的线条粗度值为1,2,3,4,5,6,大家可以通过图表感受到ggplot图表中线条的粗度变化规律。

除了折线图(以及路径图,等图层中的线条之外),在theme系统中存在大量的关于线条的属性设置(网格系统、图表边框、轴线、图例系统),均可以参照以上参数进行设置。

原文发布于微信公众号 - 数据小魔方(datamofang)

原文发表时间:2016-10-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏落影的专栏

OpenGL光照学习以及OpenGL4环境

前言 最近稍有空闲,整理下之前学习光照的笔记,以及在配置OpenGL4环境过程中遇到的问题。 光照 1、模拟灯光 模拟灯光:通过GPU来计算场景中的几何图...

44370
来自专栏HT

根据矩阵变化实现基于 HTML5 的 WebGL 3D 自动布局

在数学中,矩阵是以行和列排列的数字,符号或表达式的矩形阵列,任何矩阵都可以通过相关字段的标量乘以元素。矩阵的主要应用是表示线性变换,即f(x)= 4 x等线性函...

26750
来自专栏数据小魔方

终于等到你——ggplot2树状图

2017年8月份的R语言更新包中,默默地加入了支持ggplot2树状图的新几何对象,从此在R语言中制作树状图,不用再求助于第三方包的辅助了。 该包既有Cran...

47160
来自专栏AI研习社

Github 项目推荐 | 用 Pytorch 实现的 Capsule Network

本库用 Pytorch 实现的 Capsule Network 基于以下论文: Dynamic Routing Between Capsules by Sara...

43290
来自专栏CDA数据分析师

技能 | 如何使用Excel数据分析工具进行多元回归分析

使用Excel数据分析工具进行多元回归分析与简单的回归估算分析方法基本相同。但是由于有些电脑在安装办公软件时并未加载数据分析工具,所以从加载开始说起(以Exce...

42880
来自专栏深度学习自然语言处理

【python】Tkinter窗口可视化二

今天我们举办了送老晚会,不知不觉,毕业是真的近了,还有整整一个月,寝室就不在属于自己了。珍惜眼前的时光,加油,坚持下来,每天进步一丢丢!

12820
来自专栏PPV课数据科学社区

商业图表:仿彭博带趋势的温度计式柱形图

例图说明 本例来自于彭博商周,以顶端带有趋势折线的温度计式柱形图,显示了各公司5年来总门店、其中自有门店的数量及趋势比较,并用标签标出自有门店占比比例。整个图表...

37870
来自专栏Golang语言社区

Go项目开发----2048小游戏(上)

刚接触go语言不久,前段时间看到一个2048的项目开发教程,于是就试着练了下手。我的环境采用的是Ubuntu Linux环境。 源码下载: https://gi...

37140
来自专栏落影的专栏

GPUImage详细解析(二)

解析 GPUImage详细解析(一) 上一篇介绍的是GPUImageFramebuffer和GPUImageFilter。 简单回顾一下: GPUImag...

31330
来自专栏日常学python

WordCloud 中英文词云图绘制,看这一篇就够了

摘要: 当我们手中有一篇文档,比如书籍、小说、电影剧本,若想快速了解其主要内容是什么,则可以采用绘制 WordCloud 词云图,显示主要的关键词(高频词)这种...

93940

扫码关注云+社区

领取腾讯云代金券