查看原文
其他

R语言可视化——ggplot图表系统中的形状

2016-10-10 小魔方 数据小魔方

今天跟大家分享ggplot图表系统中形状。


在ggplot函数系统中,形状是一类重要的映射属性,如同颜色一样,它可以被赋予给变量,当然也可以直接指定实际的形状类别。


library(ggplot2)

library(reshape2)



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(newdata,aes(Company,Sale,group=Year,colour=Year))+geom_line()+geom_point()




以上函数通过一个简单的折线图+散点图的形式展现了默认状态下输出的散点形状。



ggplot函数的图层理念中,修改局部图层的元素,需要在局部图层内进行设定,这里需要在geom_point()函数内部进行形状设定。


R绘图系统中存储着的形状符号多达25种:




我们尝试着选择几种形状进行展示:


ggplot(mydata,aes(Company,Sale,group=Year,colour=Year))+geom_line()+geom_point(shape=0,size=3)





ggplot(mydata,aes(Company,Sale,group=Year,colour=Year))+geom_line()+geom_point(shape=10,size=3)




ggplot(mydata,aes(Company,Sale,group=Year,colour=Year))+geom_line()+geom_point(shape=8,size=3)




ggplot(mydata,aes(Company,Sale,group=Year,colour=Year))+geom_line()+geom_point(shape=24,size=3)




ggplot(mydata,aes(Company,Sale,group=Year,colour=Year))+geom_line()+geom_point(shape=23,size=3)




你也可以通过将形状映射指定给一个分类变量,这样不同的形状将会作为分类标识:


ggplot(mydata,aes(Company,Sale,group=Year,colour=Year))+geom_line()+geom_point(aes(shape=Year),size=3)




默认情况下,散点图只有colour属性,没有fill属性,但是当散点图被赋予形状映射之后,他就会扩展fill属性。


ggplot(mydata,aes(Company,Sale,group=Year))+geom_line()+geom_point(shape=22,size=3,colour="black",fill="red")




至于形状的大小,你可以根据自己的需要和喜好自由调整,就像调整线条的size一样。


ggplot(mydata,aes(Company,Sale,group=Year))+geom_line()+geom_point(shape=22,size=5,colour="black",fill="red")




因为形状属于分类性质的映射属性,所以形状不可以被指定给连续性变量:



ggplot(mydata,aes(Company,Sale,group=Year))+geom_line()+geom_point(aes(shape=Sale),size=5,colour="black",fill="red")


软件提示:

Error: A continuous variable can not be mapped to shape


但是形状的大小是可以被映射给连续性变量的:


ggplot(mydata,aes(Company,Sale,group=Year))+geom_line()+geom_point(aes(size=Year),shape=22,colour="black",fill="red")



当将形状大小(size)指定给离散变量时,虽然可以出来图表,但是软件提示不建议将形状大小映射给离散变量。


ggplot(mydata,aes(Company,Sale,group=Year))+geom_line()+geom_point(aes(size=Year,colour="grey"),shape=22,fill="red")


Warning message:

Using size for a discrete variable is not advised. 



基于以上叙述,这里我想总结两点:


一、关于属性映射的问题(形状、大小、颜色、线条)


  • 形状属性只能通过连续型变量进行映射;

  • 大小属性同时可以指定给连续性变量、离散型变量(软件并不建议)。

  • 颜色变量是所有属性中为数不多的既可以使用离散型变量、又可以使用连续性变量进行映射的属性


二、关于制定属性映射时shape、size、colour(fill)的位置问题。


  • 如果属性是指定给数据集中的变量(无论是连续性还是离散型)的话,那么一定要包含在美学属性之内(aes()):因为只有包含在aes()中,软件才能通过在数据集中调用对应变量进行映射。

  • 当要将属性映射指定给具体的属性类别时(比如具体的颜色名称、色值以及形状大小、代号和类别),那么要将其放在对应图层(geom_xxx())内,美学属性【aes()】系统外。

  • 作用于单个图层的映射属性要放在对应图层中,(比如作用于线条的属性要放在geom_line()内,作用于形状的属性要放在geom_point()内),作用于全局的属性要放在全局系统函数层内【ggplot()】。(比如本例中同时作用于折线图和散点图的数据集、x轴y轴变量以及分组变量等)


以上是个人学习ggplot函数过程中所获得的一些体会和心得,希望能够帮助大家在学习R语言可视化过程中少走一些弯路,限于个人能力和水平,其中难免会有些叙述不当或者纰漏之处,还望小伙伴们可以批评指正。




您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存