R中的r语言ggplot画图2绘图怎么画图???

ggplot2作图详解1:入门函数qplot
ggplot2的功能不用我们做广告,因为它的作者Hadley
Wickham就说ggplot2是一个强大的作图工具,它可以让你不受现有图形类型的限制,创造出任何有助于解决你所遇到问题的图形。一点也不谦虚。
H.W.还说了另外一句话,“学习ggplot2你得忘记一些东西”,所以也有人说ggplot2是作图软件中的太极功。有点高深。
那好吧,我就怀着无比崇敬的心情来学一学这太极图法。先安装软件包:
install.packages("ggplot2")
1 qplot函数参数
Hadley Wickham同学很善解人意,知道我们接受一种新事物不会太容易,所以设计了个qplot函数。qplot
即“快速作图”(quick plot),顾名思义,能快速对数据进行可视化分析。它的用法和R
base包的plot函数很相似,主要作用是让读者/用户在不知不觉中洗脑。先看看它的参数:
qplot(x, y = NULL, ..., data, facets = NULL,
margins = FALSE, geom = "auto", stat = list(NULL),
position = list(NULL), xlim = c(NA, NA),
ylim = c(NA, NA), log = "", main = NULL,
xlab = deparse(substitute(x)),
ylab = deparse(substitute(y)), asp = NA)
x, y: 意义明确,不用说了
这个可以有,为数据框(data.frame)类型;如果有这个参数,那么x,y的名称必需对应数据框中某列变量的名称
图形/数据的分面。这是ggplot2作图比较特殊的一个概念,它把数据按某种规则进行分类,每一类数据做一个图形,所以最终效果就是一页多图
margins: 是否显示边界
图形的几何类型(geometry),这又是ggplot2的作图概念。ggplot2用几何类型表示图形类别,比如point表示散点图、line表示曲线图、bar表示柱形图等。
统计类型(statistics),这个更加特殊。直接将数据统计和图形结合,这是ggplot2强大和受欢迎的原因之一。
position: 图形或者数据的位置调整,这不算太特殊,但对于图形但外观很重要
xlim, ylim, xlab, ylab, asp: 初步可以按照plot函数的相应参数来理解
作为入门的第一节,下面主要讲data和geom参数。
2 qplot做散点图
2.1 使用向量数据
和plot函数一样,如果不指定图形的类型,qplot默认做出散点图。对于给定的x和y向量做散点图,qplot用法也和plot函数差不多:
library(ggplot2)
x &- 1:1000
y &- rnorm(1000)
plot(x, y, main="Scatter plot by plot()")
qplot(x,y, main="Scatter plot by qplot()")
2.2 使用数据框数据
虽然可以直接使用向量数据,但ggplot2更倾向于使用数据框类型的数据作图。使用数据框有几个好处:数据框可以用来存储数值、字符串、因子等不同类型
等数据;把数据放在同一个R数据框对象中可以避免使用过程中数据关系的混乱;数据外观的整理和转换方便。ggplot2中使用数据框作图的最直接的一个效
果就是:你可以直接用数据的分类特性(数据框中的列变量)来决定图形元素的外观,这个过程在ggplot2中称为映射(mapping),是自动的。
在演示使用数据框作图的好处之前我们先了解以下ggplot2提供的一组有关钻石的示范数据 diamonds:
str(diamonds)
## 'data.frame':
53940 obs. of
10 variables:
0.23 0.21 0.23 0.29 0.31 0.24 0.24 0.26 0.22 0.23 ...
: Ord.factor w/ 5 levels "Fair"&"Good"&..: 5 4 2 4 2 3 3 3 1 3 ...
: Ord.factor w/ 7 levels "D"&"E"&"F"&"G"&..: 2 2 2 6 7 7 6 5 2 5 ...
$ clarity: Ord.factor w/ 8 levels "I1"&"SI2"&"SI1"&..: 2 3 5 4 2 6 7 3 4 5 ...
61.5 59.8 56.9 62.4 63.3 62.8 62.3 61.9 65.1 59.4 ...
55 61 65 58 58 57 57 55 61 61 ...
326 326 327 334 335 336 336 337 337 338 ...
3.95 3.89 4.05 4.2 4.34 3.94 3.95 4.07 3.87 4 ...
3.98 3.84 4.07 4.23 4.35 3.96 3.98 4.11 3.78 4.05 ...
2.43 2.31 2.31 2.63 2.75 2.48 2.47 2.53 2.49 2.39 ...
可以看到这是数据框(data.frame)类型,有10个变量(列),每个变量有53940个测量值(行)。第一列为钻石的克拉数(carat),为数
字型数据;第二列为钻石的切工好坏(cut),为因子类型数据,有5个水平;第三列为钻石颜色(color),为7水平的因子;后面还有其他数据。由于数
据太多,我们只取前7列的100个随机观测值。数据基本就是我们平时记录原始数据的样式:
set.seed(1000) # 设置随机种子,使随机取样具有可重复性
datax&- diamonds[sample(53940, 100), seq(1,7)]
head(datax, 4)
cut color clarity depth table price
## 1 Ideal
## 4 Ideal
## 3 Ideal
如果要做钻石克拉和价格关系的曲线图,用plot和qplot函数都差不多:
plot(x=datax$carat, y=datax$price, xlab="Carat", ylab="Price", main="plot function")
qplot(x=carat, y=price, data=datax, xlab="Carat", ylab="Price", main="qplot function")
但如果要按切工进行分类作图,plot函数的处理就复杂了,你首先得将数据进行分类提取,然后再一个个作图。虽然可以用循环完成,但作图后图标的添加还得非常小心,你得自己保证数据和图形外观之间的对应关系:
plot(x=datax$carat, y=datax$price, xlab="Carat", ylab="Price", main="plot function", type='n')
cut.levels &- levels(datax$cut)
cut.n &- length(cut.levels)
for(i in seq(1,cut.n)){
subdatax &- datax[datax$cut==cut.levels[i], ]
points(x=subdatax$carat, y=subdatax$price, col=i, pch=i)
legend("topleft", legend=cut.levels, col=seq(1,cut.n), pch=seq(1,cut.n), box.col="transparent", cex=0.8)
但用ggplot2作图你需要考虑数据分类和图形元素方面的问题就很少,你只要告诉它用做分类的数据就可以了:
qplot(x=carat, y=price, data=datax, color=cut, shape=cut, main="qplot function")
如果不喜欢它默认的图形背景,要改变也相当简单,ggplot2预置了几个模板,这些内容我们在后面再详细说:
theme_set(theme_bw())
qplot(x=carat, y=price, data=datax, color=cut, shape=cut, main="qplot function")
数据框可以存储不同的数据,而这些数据是有类型差别的。ggplot2作图对各类数据的要求也非常严格,用于分类的数据必需是因子类型,否则就出错,例如下面的语句就会出错:
qplot(x=carat, y=price, data=datax, shape=depth)
## Error: A continuous variable can not be mapped to shape
3 qplot做曲线图
和plot函数一样,qplot也可以通过设置合适的参数产生曲线图,这个参数就是geom(几何类型)。图形的组合非常直接,组合表示几何类型的向量即可:
qplot(x=carat, y=price, data=datax, color=cut, geom="line", main="geom=\"line\"")
qplot(x=carat, y=price, data=datax, color=cut, geom=c("line", "point"), main="geom=c(\"line\", \"point\")")
4 qplot做统计图
qplot是名副其实的qplot(quick
plot)函数,通过改变几何类型geom参数的值你可以获得各种图形。geom参数可以设置的值和意义是:
point:散点图
line:曲线图
smooth:平滑曲线
jitter:另一种散点图
boxplot:箱线图
histogram:直方图
density:密度分布图
bar:柱状图
前两种我们看过了,bar类型下面另讲,jitter以后有机会再说,看看其他4种类型:
qplot(carat, price, data = diamonds, color=cut, geom = "smooth", main = "smooth")
qplot(cut, price, data = diamonds, fill=cut, geom = "boxplot", main = "boxplot")
qplot(price, data = diamonds, fill=cut, geom = "histogram", main = "histogram")
qplot(price, data = diamonds, color=cut, geom = "density", main = "density")
能做什么样的图形取决于数据,这点我们都很清楚,所以不同类型的图使用的数据有所不同,参数也有变化。前面我们说ggplot2可以整合不同类型的图形到
一个图中,但很重要的一个前提是要组合的这些形状要能共享一组数据和参数。道理很简单,如果某人绞尽脑汁把散点图和密度分布图融合在一个图中展示,不出一
周他就要住进精神病院。
qplot(price, data = diamonds, color=cut, geom = c("point", "density"))
## Error: geom_point requires the following missing aesthetics: y
5 qplot做柱形图
做柱形图很少直接用原始数据,一般都要通过计算变换如求平均值后再做。这其实是一个统计过程,所以多数柱形图应该也是统计类型的图。ggplot2对柱形
图的处理体现了这一思想:柱形图是一种特殊的直方图。所以ggplot2可以直接用原始数据做出柱形图,这是它的优点之一。下面按钻石切工对价格求平均值
后做柱形图:
qplot(x=cut, y=price, data = diamonds, fill=cut, geom = "histogram",
stat="summary", fun.y="mean")
stat参数表示统计的类型,而fun.y则表示应用于统计的函数。把geom参数值换成bar得到相同的图形:
qplot(x=cut, y=price, data = diamonds, fill=cut, geom = "bar",
stat="summary", fun.y="mean")
如果不嫌麻烦,可以先计算出平均值再柱形图也没什么问题。引物bar图形的本质是统计图形,所以得设置stat参数为identity,即不做统计:
(mean.price &- with(diamonds, aggregate(price~cut, FUN=mean)))
## 3 Very Good
qplot(x=cut, y=price, data=mean.price, fill=cut, geom="bar", stat="identity")
通过学习上面的简单例子可能会有点收获:了解了ggplot2的qplot函数能用什么样的数据做什么图,知道一点关于ggplot2几何类型和统计类型
的概念,如何从传统的R语言作图中转过脑筋来。但也仅此而已。ggplot2作图是基于图层的,从上面qplot函数的使用例子中显然看不出来,除此外还
有很多深层次的概念、理论和函数。
sessionInfo()
## R version 3.0.1 ()
&## Platform: x86_64-pc-linux-gnu (64-bit)
## locale:
[1] LC_CTYPE=zh_CN.UTF-8
LC_NUMERIC=C
[3] LC_TIME=zh_CN.UTF-8
LC_COLLATE=zh_CN.UTF-8
[5] LC_MONETARY=zh_CN.UTF-8
LC_MESSAGES=zh_CN.UTF-8
[7] LC_PAPER=C
[9] LC_ADDRESS=C
LC_TELEPHONE=C
&## [11] LC_MEASUREMENT=zh_CN.UTF-8 LC_IDENTIFICATION=C
## attached base packages:
## [1] tcltk
grDevices utils
## [8] base
## other attached packages:
&## [1] mgcv_1.7-24
ggplot2_0.9.3.1 knitr_1.3.4
## loaded via a namespace (and not attached):
[1] colorspace_1.2-2
dichromat_2.0-0
digest_0.6.3
[4] evaluate_0.4.4
formatR_0.8
grid_3.0.1
[7] gtable_0.1.2
highr_0.1.2
labeling_0.2
&## [10] lattice_0.20-15
MASS_7.3-27
Matrix_1.0-12
&## [13] munsell_0.4.2
nlme_3.1-110
&## [16] proto_0.3-10
RColorBrewer_1.0-5 reshape2_1.2.2
## [19] scales_0.2.3
stringr_0.6.2
tools_3.0.1
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。R语言之ggplot2画图篇 - CSDN博客
R语言之ggplot2画图篇
quick plot
数据集:diamonds
(1)基本用法
library(ggplot2)
length(diamonds)
set.seed(1410)#设定种子数
dsmall&-diamonds[sample(nrow(diamonds),100),]#随机产生样本数
qplot(carat,price,data=diamonds)#画散点图
qplot(log(carat),log(price),data=diamonds)
color、size、shape
qplot(carat,price,data=dsmall,colour=color)
qplot(carat,price,data=dsmall,shape=cut)
&span style=&font-family: Arial, Helvetica, sans-&&qplot(carat,price,data=dsmall,alpha=I(1/20))&/span&设置透明度
取值可以为:point、smooth、boxplot、path、line
对于连续型变量:geom可取histogram、freqpoly、density
对于离散型变量:bar
qplot(carat,price,data=dsmall,geom=c(&point&,&smooth&))
qplot(carat,price,data=dsmall,geom=c(&point&,&smooth&),span=0.2)
qplot(carat,price,data=dsmall,geom=c(&point&,&smooth&),span=1)
数据(Data)和映射(Mapping)
将数据中的变量映射到图形属性,映射控制了二者之间的关系
标度(Scale)
标度负责控制映射后图形属性的显示方式,具体形式上看是图例和坐标刻度
几何对象(Geometric)
几何对象代表我们在图中实际看到的图形元素,如点、线、多边形等
统计变换(Statistics)
对原始数据进行某种计算,如对二元菜点图加上一条回归线
坐标系统(Coordinate)
坐标系统控制坐标轴并影响所有图形元素,坐标轴可以进行变换以满足不同的需要
图层(Layer)
数据、映射、几何对象、统计变换等构成一个图层,图层可以允许用户一步步的构建图形,方便单独对图层进行修改
分面(Facet)
条件绘图,将数据按某种方式分组,然后分别绘图。分布就是控制分组绘图的方式和排列形式
(1)geom_point
p&-ggplot(data=mpg,mapping=aes(x=cty,y=hwy))
p+geom_point()
summary(p)
summary(p+geom_point())
#将年份映射到颜色属性
p&-ggplot(mpg,aes(x=cty,y=hwy,colour=factor(year)))
p+geom_point()
(2)增加平滑线
p+geom_point()+stat_smooth()
p&-ggplot(mpg,aes(x=ctymy=hwy))
p+geom_point(aes(colour=factor(year)))+stat_smooth()
(3)两种等价的绘图方式
p&-ggplot(mpg,aes(x=cty,y=hwy))
p+geom_point(aes(colour=factor(year)))+stat_smooth()
d&-ggplot()+
geom_point(data=mpg,aes(x=cty,y=hwy,colour=factor(year)))+
stat_smooth(data=mpg,aes(x=cty,y=hwy))#此时除了底层画布外,有两个图层,分别定义了geom和stat
(4)用标度来修改颜色取值
p&-ggplot(mpg,aes(x=cty,y=hwy))
p+geom_point(aes(colour=factor(year)))+stat_smooth()+scale_color_manual(values=c(&blue&,&red&))
(5)将排量映射到散点大小
p+geom_point(aes(colour=factor(year),size=displ))+
stat_smooth()+
scale_color_manual(values=c(&blue2&,&red4&))
p+geom_point(aes(colour=factor(year),size=displ),alpha=0.5,position=&jitter&)+
stat_smooth()+
scale_color_manual(values=c(&blue2&,&red4&))+
scale_size_continuous(range=c(4,10))
(6)用坐标控制图形显示的范围
p+geom_point(aes(colour=factor(year),size=displ),alpha=0.5,position=&jitter&)+
stat_smooth()+
scale_color_manual(values=c(&blue2&,&red4&))+
scale_size_continuous(range=c(4,10))+
coord_cartesian(xlim=c(15,25),ylim=c(15,40))
(7)利用facet分别显示不同年份的数据
p+geom_point(aes(colour=class,size=displ),alpha=0.5,position=&jitter&)+
stat_smooth()+
scale_size_continuous(range=c(4,10))+
facet_wrap(~year,ncol=1)
(8)增加图名并精细修改图例
p&-ggplot(mpg,aes(x=cty,y=hwy))
p+geom_point(aes(colour=class,size=displ),alpha=0.5,position=&jitter&)+
stat_smooth()+
scale_size_continuous(range=c(4,10))+
facet_wrap(~year,ncol=1)+
opts(title='汽车油耗与型号')+
labs(x=&每加仑高速公路行驶距离&,y=&每加仑城市公路行驶距离&)+
guides(size=guide_legend(title=&排量&),colour=guide_legend(titile=&车型&,override.aes=list(size=5)))
(9)直方图
p&-ggplot(mpg,aes(x=hwy))
p+geom_histogram()
直方图的几何对象中内置有默认的统计变换
p+geom_histogram(aes(fill=factor(year),y=..density..),alpha=0.3,colour=&black&)+
stat_density(geom=&line&,position=&identity&,size=1.5,aes(colour=factor(year)))+
facet_wrap(~year,ncol=1)
(10)条形图
p&-ggplot(mpg,aes(x=class))
p+geom_bar()
class2&-mpg$class
class2&-reorder(class2,class2,length)
mpg$class2&-class2
p&-ggplot(mpg,aes(x=class2))
p+geom_bar(aes(fill=class2))
p&-ggplot(mpg,aes(class2,fill=factor(year)))
p+geom_bar(position=&identity&,alpha=0.5)
p+geom_bar(position=&dodge&)
p+geom_bar(position=&stack&)
p+geom_bar(position=&fill&)
p+geom_bar(aes(fill=class2))+facet_wrap(~year)
(11)饼图
p&-ggplot(mpg,aes(x=factor(1),fill=factor(class)))+geom_bar(width=1)
p+coord_polar(theta=&y&)
(12)箱线图
p&-ggplot(mpg,aes(class,hwy,fill=class))
p+geom_boxplot()
p+geom_violin(alpha=0.3,width=0.9)+geom_jitter(shape=21)
3.观察密集散点的方法
增加扰动(jitter)
增加透明度(alpha)
二维直方图(stat_bin2d)
密度图(stat_density2d)
p&-ggplot(diamonds,aes(carat,price))
p+stat_bin2d(bins=60)
p+stat_density2d(aes(fill=..level..),geom=&polygon&)+
coord_cartesian(xlim=c(0,1.5),ylim=c(0,6000))+
scale_fill_continuous(high=&red2&,low=&blue4&)
4.风向风速玫瑰图
#随机生成100次风向,并洪到16个敬意内
dir&-cut_interval(runif(100,0,360),n=16)
#随机生成100次风速,并划分成4种强度
mag&-cut_interval(rgamma(100,15),4)
sample&-data.frame(dir=dir,mag=mag)
#将风向映射到x轴,频数映射到y轴,风速大小映射到填充色,生成条形图后再转为极坐标形式即可
p&-ggplot(sample,aes(x=dir,y=..count..,fill=mag))
p+geom_bar()+coord_polar()
本文已收录于以下专栏:
相关文章推荐
plot(),lines(),gplot()等绘图方法不想记笔记,个人觉得它们的图像太丑,不想使用。
x轴是日期型,画图各种困扰,日期显示、日期黏连怎么办?
图例想放底部,或者图像内怎么办?
引言折线图一般用于描述一维变量随着某一连续变量变化的情况,连续变量通常为时间。换句话说,折线图最适合描述时间序列数据的变化情况。当然随着离散变量变化也是可以的,不过这个离散变量必须是有序的。画一条折线...
引言我们经常想观察一批数据的分布形态,直方图、密度图、箱线图、小提琴图和点图等都是很好的实现形式。在此,我们简略介绍直方图、密度图和箱线图,这种三种图形对我们来说更为常用。直方图很多人没搞清楚条形图和...
前面我们使用qplot函数对ggplot2做图的方法进行了初步的了解,并比较了qplot和plot函数的用法。从最终得到的结果(图形)来看,除了外观不同外好像qplot函数和plot函数并没有什么本质...
复习基础作图命令学习基本的ggplot作图命令
这里我们会用R语言中的基础作图系统和ggplot2中的qplot以及ggplot作常见的图。
下面是几种常见的图:
散点图线图条形图直方图...
引言我们还可以对图形中的坐标轴进行处理,包括x、y轴对换、设定坐标轴范围、刻度线修改与去除等等。要想对图形玩得转,坐标轴处理精通不可或缺。坐标轴对换我们使用coord_flip()函数来对换坐标轴。l...
更多内容请见:R、ggplot2、shiny 汇总初始图样:library(ggplot2)
dt = data.frame(A = c(2, 7, 4, 10, 1), B = c('B','A',...
R语言里面一个比较重要的绘图包——ggplot2,是由Hadley Wickham于2005年创建,于2012年四月进行了重大更新,作者目前的工作是重写代码,简化语法,方便用户开发和使用。ggplot...
引言ggplot2包的作图质量毋庸置疑,但是其作图语法对新手来说还是有点难度,ggplot2:数据分析与图形艺术这本书也介绍了ggplot2包的基本哲学思想和操作,个人感觉例子还不够丰富,所以对该包的...
展示ggplot2中基本的一些作图方法
他的最新文章
讲师:何宇健
讲师:董岩
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)ggplot2入门与进阶(上) | 塞迩斯【图文】R语言绘图-(2)_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
R语言绘图-(2)
大小:3.15MB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢ggplot2绘图入门系列之二:图层控制与直方图 | R blogs / lang
我的图书馆
ggplot2绘图入门系列之二:图层控制与直方图 | R blogs / lang
This post was kindly contributed by
- go there to comment and to read
如所述,ggplot2使用图层将各种图形元素逐步添加组合,从而形成最终结果。第一层必须是原始数据层,其中data参数控制数据来源,注意数据形式只能是数据框格式。aes参数控制了对哪些变量进行图形映射,以及映射方式,aes是Aesthetic的缩写。下面我们来绘制一个直方图作为示例。数据集仍采取mpg,对hwy变量绘制直方图。首先加载了扩展包,然后用ggplot函数建立了第一层,hwy数据映射到X轴上;使用+号增加了第二层,即直方图对象层。此时p被视为一种层对象,使用summary函数可得到关于它的更多信息,print(p)命令即可进行绘图。()p &- ( = mpg,aes(x = hwy))p &- p + geom_histogram()(p)data: manufacturer, model, displ, year, cyl, trans,
drv, cty, hwy, fl, class [234x11]mapping:
x = hwyfaceting: facet_grid(. ~ ., FALSE)-----------------------------------geom_histogram:stat_bin:position_stack: (width = NULL, height = NULL)上面的信息告诉我们,p对象含有两层,第一层数据层描述了变量和映射方式,第二层是直方图对象(geom_histogram),geom表示几何对象,它是ggplot中重要的图层控制对象,因为它负责图形渲染的类型。geom_histogram是图形渲染类型的一种,其它类型可参见。每个geom对象都需要有数据输入,数据可以从第一层中自动读取,也可以在aes参数中直接设置。而且每个geom还默认搭配某种统计变换(stat),geom_histogram的默认统计变换是stat_bin。它负责对数据进行分组计数。下面我们尝试两种更为复杂的直方图,首先将数据按照year这个变量划分为两组,用不同的颜色绘制直方图,而且用频率而非计数来刻画Y轴,并添加密度曲线。p &-&(mpg,aes(hwy))p + geom_histogram(position =&'identity',& & alpha=0.5,& & aes(y = ..density..,& & fill =&(year)))&+& & stat_density(geom =&'line',& & position =&'identity',& & aes(colour =&(year)))如果想将两个直方图分开绘制,也可以使用facet_grid参数,结果如下图所示。另:在win系统中用ggplot2绘制直方图,其底部有难看的缺口。但在linux系统中正常,不知原因何在,望知情人士不吝赐教。
TA的最新馆藏
喜欢该文的人也喜欢

我要回帖

更多关于 r语言绘图ggplot2 的文章

 

随机推荐