ggplot2主要部件——快速上手ggplot2

ggplot2主要部件——快速上手ggplot2

简介
R语言的ggplot2绘图真的是务必强大,学习R最好的参考书就《R语言实战》这本书。本文借鉴该书里面的例子,希望能对大家对ggplot2的使用有个直观的了解。

一、图类型

geom_XXX(…)
bar条形图,boxplot箱线图,violin小提琴图,density密度图,histogram直方图,
水平线,垂线,jitter抖动点,
line线图,point散点图,地毯图,
smooth拟合曲线,
text文字注解

例子1:箱线图+小提琴图

data(singer, package = 'lattice')
head(singer)
#根据x的不同制作多个箱线图
ggplot(singer, aes(x=voice.part, y=height)) +
  geom_violin(fill = 'lightblue') +
  geom_boxplot(fill = 'lightgreen', width = 0.2)

画密度图+条形图

dtrain %>%
  ggplot(aes(x=log(transactionRevenue), y = ..density..)) +
  geom_histogram(fill = 'steelblue', na.rm = T, bins = 40) +
  geom_density(fill = 'orange', color = 'orange', alpha = 0.3, na.rm = T) +
  labs(
    title = 'Distribution of transaction revenue',
    x = 'Natural log of transaction revenue'
  )

密度图:https://zhuanlan.zhihu.com/p/27336619

(1)只画密度图

ggplot(sat_d,aes(x=V1,colour=time))+
  geom_density(position="identity")

二、分组

在一个图画出2个或多个组。

library(car)  
data(Salaries)
head(Salaries)
library(ggplot2)

1.查看薪水salary如何随学术等级rank变换的

(1)每个rank下的箱型图
ggplot(data = Salaries, aes(x = rank, y = salary)) +
  geom_boxplot()

(2)salary的密度图,但添加分组rank
ggplot(data = Salaries, aes(x = salary, fill = rank)) +
  geom_density(alpha = .3)

2.通过性别sex和学术等级rank分组,绘制“获得博士学位年数”yrs.since.phd与薪水salary的关系

(1)散点图
ggplot(data = Salaries, aes(x = yrs.since.phd, y = salary,
                            			shape = sex, color = rank)) +
  geom_point(size=3)

(2)条形图:分组条形图——按学术等级和性别来可视化教授人数
ggplot(data = Salaries, aes(x = rank, fill = sex)) +
  geom_bar(position = 'dodge')   
#可以选择不同的堆叠方式


三、刻面

针对:希望图形不是重叠在一张图,而是分开成单独的图

1. 函数表达

法一:

facet_wrap(~var, ncol = n)        #将每个var水平排列成n列的独立图,或者有nrow = n

法二:

facet_grid(rowvar ~ colvar)       #rowvar和colvar组合的独立图
facet_grid(rowvar ~ .)                #将每个rowvar水平排列成1列的独立图
facet_grid(. ~ colvar)       	    #将每个colvar水平排列成1行的独立图

例子1:

data(singer, package = 'lattice')
str(singer)
(1)画直方图展示各个声部歌手的身高——要求分块
ggplot(data = singer, aes(x = height)) +  #先绘制一般的直方图
  geom_histogram() +
  facet_wrap(~voice.part, nrow = 4)       #按要求进行分块

(2)画密度图展示各个声部歌手的身高——要求分块
ggplot(data = singer, aes(x = height, fill = voice.part)) +  
  geom_density() +               #先绘制一般的堆叠密度图
  facet_grid(voice.part~.)       #按要求进行分块

(3)按性别进行分块(在前面的基础上)

通过性别sex和学术等级rank分组,绘制“获得博士学位年数”yrs.since.phd与薪水salary的关系

ggplot(data = Salaries, aes(x = yrs.since.phd, y = salary,
                            shape = sex, color = rank)) +
  geom_point(size=3) +
  facet_grid(.~sex)  


四、添加光滑曲线

针对:添加平滑曲线(线性,非线性和非参数)到散点图中
geom_smooth()

data("Salaries", package = 'carData')

(1)绘制博士毕业年数和薪水的关系

ggplot(data = Salaries, aes(x=yrs.since.phd, y=salary))+
  geom_point() +
  geom_smooth()       #默认为非参数光滑曲线

#结论:适合用二次多项式拟合

(2)指定二次多项式曲线,并根据性别进行区分

ggplot(data = Salaries, aes(x=yrs.since.phd, y=salary,
                            shape = sex, color = sex,
                            linetype = sex))+
  geom_point() +
  geom_smooth(method = lm, formula = y~poly(x,2))    


五、修改ggplot2图形的外观


六、多重图

把2个或更多的基本图形放到单个图形中。

install.packages('gridExtra')

p1 = ggplot(data = Salaries, aes(x=rank)) + geom_bar()
p2 = ggplot(data = Salaries, aes(x=sex)) + geom_bar()
p3 = ggplot(data = Salaries, aes(x=yrs.since.phd, y=salary)) + geom_point()
library(gridExtra)
grid.arrange(p1, p2, p3, ncol=3)


参考文献:

[1] R语言实战——使用ggplot2进行高级绘图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值