您现在的位置:主页 > 数据可视化 > R数据可视化之ggplot2 (二)

R数据可视化之ggplot2 (二)

2017-06-19 15:48
u=2156138114,3697068155&fm=21&gp=0前面讲到了,ggplot2的基本画图,并初步了解了画图的风格,但是画出来的图并不是很美观,我们需要怎么样才能修改我们画的图了?画出一福美观发图画来,在画图之前我们先了解一下,有哪些参数,大概看一下,可能记不住,但是,熟能生巧,多敲几次就可以了,首先我们看看geom_xx后面可以跟哪些类型的图形:0e6aa1823d4cac3887d86bee6461106a_b
另外我们可以在图层上对数据进行哪些变换了?也就是stat=可以接哪些:
df2cfed125a11b04d3989b4c6b2ced2c_b知道这两个也没有用啊,我们知道加一个geom_xx就加个图层,那要是我只是做一些其他修改,不需要再绘制一些图形上去怎么办?
现在来说说,分别有哪些图层类型前面讲到的mapping是一个就是绘制最基本的坐标轴和数据,geom_xx是一个,scale是一个,theme是一个,xlab是一个,ggtitle是一个,training是一个.现在虽然不知道他们的用处,不要紧.一点点的学.我们在实战中慢慢学会,今天先从条形图的深加工开始.
首先:
library(ggplot2)
library(gcookbook) #用于获取数据集

1.基础的条形图

1

ggplot(pg_mean, aes(x = group, y = weight)) + geom_bar(stat = "identity")

3

 


ggplot(BOD, aes(x = Time, y = demand)) + geom_bar(stat = "identity")

2

4看看有什么区别,在第二个图形中,数据中time没有6这个值,但是图形X轴还是画出来了,这就是对于分类变量和连续变量的不同.

如果把时间转为离散的分类型,再看看:,并没有画出6来

ggplot(BOD, aes(x = factor(Time), y = demand)) + geom_bar(stat = "identity")

5

 

看看如何给条形图上色:运用fill="  ",我们发现,fill是填充色,colour是边框色,(这里colour是英式英语颜色的写法,等价于美式英语color)
ggplot(pg_mean, aes(x = group, y = weight)) + geom_bar(stat = "identity", fill = "lightblue", 
    colour = "black")

6

 

2.涉及分组变量的条形图

7

ggplot(cabbage_exp, aes(x = Date, y = Weight, fill = Cultivar)) + geom_bar(stat="identity",position = "dodge")
我们发现fill后面跟着的是一个变量,且是一个分类变量,得到的结果是颜色会根据分类不同使用不同颜色.
position = "dodge"将同类条形图并排放着,(dodge英文意思是闪躲回避的意思,这样记它的作用会比较快)

条形图-ggplot2 - yugao1986@126 - R语言学习博客--yugao1986

我们想改一下颜色怎么办?fill后面已经跟了分类变量,那我们只需要再添加一个图层就可以啦,这时可用

scale_fill_brewer(palette = "Pastel1") 方便记忆palette的英文意思是调色板,面板的意思.这里便是用的叫Pastel1的色板,.Pastel的英文意思是彩色粉笔,有没有发现颜色没有那么浓郁啦.是有点粉笔的感觉哈.还可以自己设定颜色,scale_fill_manual(values = c("#669933", "#FFCC66"))这里manual英文意思是"手工的",

ggplot(cabbage_exp, aes(x = Date, y = Weight, fill = Cultivar)) + geom_bar(position = "dodge",stat="identity") + scale_fill_brewer(palette = "Pastel1")


8

 

ggplot(cabbage_exp, aes(x = Date, y = Weight, fill = Cultivar)) + geom_bar(position = "dodge",stat="identity") + scale_fill_manual(values = c("#669933", "#FFCC66")) #这个颜色你喜欢吗?

12

另外我们发现,上面图形都是两两一组,那如果有一组就一个值怎么办,那么图形会确失一条bar,然后加宽,具体看图

ce <- cabbage_exp[1:5, ]

ggplot(ce, aes(x = Date, y = Weight, fill = Cultivar)) + geom_bar(position = "dodge",stat="identity", colour = "black") + scale_fill_brewer(palette = "Pastel1")

条形图-ggplot2 - yugao1986@126 - R语言学习博客--yugao1986

 

3.计数数据条形图

前面我们都是stat="identity"即每一个bar的高度根据另一个数值变量来决定,那如果,面对像下面的数据,caret变量是分类因子型,这列变量中同一水平的因子有好几个,那么我们画条形图时,一般采用频数型,这时用水平出现的频数当做bar的高度.stat="bin"当然也可以不写,因为geom_bar默认是bin9


ggplot(diamonds, aes(x = carat)) + geom_bar()
## 可以用 "binwidth = x" to 调整bar的宽度

11

 

5.对正负数用不同的颜色作图

12

csub <- subset(climate, Source == "Berkeley" & Year >= 1900) #选取Source == "Berkeley" & Year >= 1900的数据
csub$pos <- csub$Anomaly10y >= 0 #创建csub$pos 变量为csub$Anomaly10y >= 0 的数据
ggplot(csub, aes(x = Year, y = Anomaly10y, fill = pos)) + geom_bar(stat = "identity", 
    position = "identity") #正负用不同颜色表示,还挺漂亮的呵,可是有点感觉不对啊,你有没有发现?

13

 

在我们日常生活中,红色一般象征正,暖色调嘛,蓝色一般表示负,冷色调呀,有没有?你家电线红色是不是火线,红色是不是正极,虽然上图没有错,但是我们想换一下,正的为红色,负的为蓝色咋办?而且我不想要旁边的图例了,怎么办?
用 scale_fill_manual() 和 guide=FALSE
ggplot(csub, aes(x = Year, y = Anomaly10y, fill = pos)) + geom_bar(stat = "identity", 
    position = "identity", colour = "black", size = 0.25) + scale_fill_manual(values = c("#CCEEFF", 
    "#FFDDDD"), guide = FALSE)

条形图-ggplot2 - yugao1986@126 - R语言学习博客--yugao1986

 

6.调整条形宽度和空间

这应该前面讲过,width = xx来控制
ggplot(pg_mean, aes(x = group, y = weight)) + geom_bar(stat = "identity")

条形图-ggplot2 - yugao1986@126 - R语言学习博客--yugao1986

 

ggplot(pg_mean, aes(x = group, y = weight)) + geom_bar(stat = "identity", width = 0.5)

条形图-ggplot2 - yugao1986@126 - R语言学习博客--yugao1986

 

ggplot(pg_mean, aes(x = group, y = weight)) + geom_bar(stat = "identity", width = 1)

条形图-ggplot2 - yugao1986@126 - R语言学习博客--yugao1986

 

那如果是一组一组的条形图我想让他们中间有点缝隙怎么办?用position = position_dodge(0.7)来控制
ggplot(cabbage_exp, aes(x = Date, y = Weight, fill = Cultivar)) + geom_bar(stat = "identity", 
    width = 0.5, position = "dodge")

 

条形图-ggplot2 - yugao1986@126 - R语言学习博客--yugao1986

ggplot(cabbage_exp, aes(x = Date, y = Weight, fill = Cultivar)) + geom_bar(stat = "identity", width = 0.5, position = position_dodge(0.7))

条形图-ggplot2 - yugao1986@126 - R语言学习博客--yugao1986

 

7.条形图的摆放,堆叠条形图

ggplot(cabbage_exp, aes(x = Date, y = Weight, fill = Cultivar)) + geom_bar(stat = "identity")

条形图-ggplot2 - yugao1986@126 - R语言学习博客--yugao1986

 

有没有发现,右边图例红色在上,而图形红色在下?修改一下
ggplot(cabbage_exp, aes(x = Date, y = Weight, fill = Cultivar)) + geom_bar(stat = "identity") + 
    guides(fill = guide_legend(reverse = TRUE))

条形图-ggplot2 - yugao1986@126 - R语言学习博客--yugao1986

 

 

8.添加标签

给每一个bar添加一个标签,表示其具体数值是多少.这里标签使用的是weight变量的数值,因为纵坐标本来就是weight

vjust表示距离bar的顶端有多少,你也可以设置成负数让标签在bar上面

ggplot(cabbage_exp, aes(x = interaction(Date, Cultivar), y = Weight)) + geom_bar(stat = "identity") + geom_text(aes(label = Weight), vjust = 1.5, colour = "white")

14

ggplot(cabbage_exp, aes(x = interaction(Date, Cultivar), y = Weight)) + geom_bar(stat = "identity") + geom_text(aes(label = Weight), vjust = -0.2,color="red")

15

堆栈的条形图加标签:需要另一个包plyr

library(plyr) 

ce <- arrange(cabbage_exp, Date, Cultivar) #根据Date,Cultivar 排序

ce <- ddply(ce, "Date", transform, label_y = cumsum(Weight)) #增加新变量label_y

ggplot(ce, aes(x = Date, y = Weight, fill = Cultivar)) + geom_bar(stat = "identity") + geom_text(aes(y = label_y, label = Weight), vjust = 1.5, colour = "white") 

16 

 

这就是部分条形图的深加工,我们虽然展示了很多功能,但在实际中我们还需要将这些功能组合起来,画出非常美观的图型.总结一下,若需要修改图层的样子,其参数应当在该图层的括号里面,所以参数在哪个图层里面,就是修改哪个图层.

未完待续,

PPV原创文章,严禁转载. (文:@白加黑治感冒)