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系统中存在大量的关于线条的属性设置(网格系统、图表边框、轴线、图例系统),均可以参照以上参数进行设置。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【STM32F429开发板用户手册】第39章 STM32F429的FMC总线应用之SDRAM
- react项目搭建
- 深入理解Java泛型(三)-泛型擦除及其相关内容
- webpack实战——预处理器(loader)【下篇】
- JAVA位运算等运算符总结
- 算法实现,用机器学习模拟一个opencv的边缘识别算法
- 开源公共组件仓库的更新日志应该如何写
- 判断ABAP代码是否处于update模式下运行的工具类
- SAP CRM WebClient UI异常的持久化机制
- 在ABAP Webdynpro里显示PDF的一种办法
- ABAP Webdynpro Interface View的用法
- ABAP Webdynpro里Component Usage的用法
- ABAP Webdynpro - 如何使用用户自定义的value help
- ABAP 740的新语法 - 使用BO association的方式进行内表连接操作
- 使用代码修改SAP CRM附件的属性