R语言进阶数据展现-5

条形图
并列条形图
citysales<-read.csv("citysales.csv")
barplot(as.matrix(citysales[,2:4]), beside=TRUE,#barplot的对象需要是矩阵。citysales数据的第2:4列.beside=T表示并列放置,而非重叠。
legend.text=citysales$City,
args.legend=list(bty="n",horiz=TRUE),#也可以在后面用legend函数
col=brewer.pal(5,"Set1"),
border="white",ylim=c(0,100),
ylab="Sales Revenue (1,000's of USD)",main="Sales Figures")
box(bty="l")

堆叠条形图
citysales<-read.csv("citysales.csv")
barplot(as.matrix(citysales[,2:4]), legend.text=citysales$City, #即去掉beside=True即可,默认为false.
args.legend=list(bty="n",horiz=TRUE),
col=brewer.pal(5,"Set1"),border="white", ylim=c(0,200),ylab="Sales Revenue (1,000's of USD)", main="Sales Figures")

高度相同,对比百分比
citysalesperc<-read.csv("citysalesperc.csv")
par(mar=c(5,4,4,8),xpd=T)#在右侧留较大空间放图例。
barplot(as.matrix(citysalesperc[,2:4]), col=brewer.pal(5,"Set1"),border="white",
ylab="Sales Revenue (1,000's of USD)",
main="Percentage Sales Figures")

legend("right",legend=citysalesperc$City,bty="n", inset=c(-0.3,0),fill=brewer.pal(5,"Set1"))#这边,inset对应的x设置为负值,则图例会画在图外。


水平条形图
barplot(as.matrix(citysales[,2:4]), beside=TRUE,horiz=TRUE,legend.text=citysales$City, args.legend=list(bty="n"),
col=brewer.pal(5,"Set1"),border="white",
xlim=c(0,100), xlab="Sales Revenue (1,000's of USD)",
main="Sales Figures")#horiz=TRUE。注意x y轴之间的互换

水平堆叠条形图
par(mar=c(5,4,4,8),xpd=T)
barplot(as.matrix(citysalesperc[,2:4]), horiz=TRUE,
col=brewer.pal(5,"Set1"),border="white",
xlab="Percentage of Sales",
main="Perecentage Sales Figures")
legend("right",legend=citysalesperc$City,bty="n",
inset=c(-0.3,0),fill=brewer.pal(5,"Set1"))

调整条形图的宽度,间距,边线,颜色
barplot(as.matrix(citysales[,2:4]), beside=TRUE,
legend.text=citysales$City, args.legend=list(bty="n",horiz=T),
col=c("#E5562A","#491A5B","#8C6CA8","#BD1B8A","#7CB6E4"),
border=FALSE,space=c(0,5),#柱子不要边框。0是同一组内,柱子之间的距离。5是组间距离。space会自动处理柱子的width,
ylim=c(0,100),ylab="Sales Revenue (1,000's of USD)",
main="Sales Figures")

barplot(as.matrix(citysales[,2:4]), beside=T,
legend.text=citysales$City,args.legend=list(bty="n",horiz=T),#args.legend即可以在后面增加参数,这些参数会传给legend.(可能barplot内置的参数,不能更详细的调整图例)
ylim=c(0,100),ylab="Sales Revenue (1,000's of USD)",
main="Sales Figures") 


x<-barplot(as.matrix(citysales[,2:4]), beside=TRUE,#把barplot存到一个object,会返回每个bar的中点的x值。
legend.text=citysales$City, args.legend=list(bty="n",horiz=TRUE),
col=brewer.pal(5,"Set1"),border="white",
ylim=c(0,100),ylab="Sales Revenue (1,000's of USD)",
main="Sales Figures")
y<-as.matrix(citysales[,2:4])#
text(x,y+2,labels=as.character(y))#要把y转为character,即字符串

y<-barplot(as.matrix(citysales[,2:4]), beside=TRUE,horiz=TRUE,
legend.text=citysales$City,args.legend=list(bty="n"),
col=brewer.pal(5,"Set1"),border="white",
xlim=c(0,100),xlab="Sales Revenue (1,000's of USD)",
main="Sales Figures")
x<-as.matrix(citysales[,2:4])
text(x+2,y,labels=as.character(x))

在bar中间标注

rain<-read.csv("cityrain.csv")
y<-barplot(as.matrix(rain[1,-1]),horiz=T,col="white",
yaxt="n",main=" Rainfall in January",xlab="Rainfall (mm)")
x<-0.5*rain[1,-1]#需要rain的第一行,不要rain的第一列。 rain[1:3,-1:-2]需要rain的1-3行,不要第1,2列。se=c(1,3,5),rain[se,0],则可以选择1,3,5行。
text(x,y,colnames(rain[-1]))


  

 

误差线
sales<-t(as.matrix(citysales[,-1]))
colnames(sales)<-citysales[,1] #把citysales的第一列作为sales的列名。
x<-barplot(sales,beside=T,legend.text=rownames(sales),
args.legend=list(bty="n",horiz=T),
col=brewer.pal(3,"Set2"),border="white",ylim=c(0,100),
ylab="Sales Revenue (1,000's of USD)",
main="Sales Figures")
arrows(x0=x,y0=sales*0.95,
x1=x,y1=sales*1.05,
angle=90,
code=3,
length=0.04,
lwd=0.4)#这边的解释见第三章里的arrows函数。

errorbars<-function(x,y,upper,lower=upper,length=0.04,lwd=0.4,...) {
arrows(x0=x,y0=y+upper,
x1=x,y1=y-lower,
angle=90,
code=3,
length=length,
lwd=lwd)
}#创建一个函数。upper和lower是自定义的的,即下例中设为了0.05*sales

errorbars(x,sales,0.05*sales)


点图
> library(reshape)#这个包可以改变数据结构
> sales<-melt(citysales)#转为长表单
Using City as id variables
> sales$color[sales[,2]=="ProductA"] <- "red"#增加新的一列color.
> sales$color[sales[,2]=="ProductB"] <- "blue"
> sales$color[sales[,2]=="ProductC"] <- "violet"
> dotchart(sales[,3],labels=sales$City,groups=sales[,2],#groups,按sales的第二列。
+ col=sales$color,pch=19,
+ main="Sales Figures",
+ xlab="Sales Revenue (1,000's of USD)")


饼图
> browsers<-read.table("browsers.txt",header=TRUE)
> browsers<-browsers[order(browsers[,2]),]#对数据的第二列排序,再让数据根据的每行与第二列的排序结果对应。
> pie(browsers[,2],
+ labels=browsers[,1],
+ clockwise=TRUE,
+ radius=1,
+ col=brewer.pal(7,"Set1"),
+ border="white",
+ main="Percentage Share of Internet Browser usage")

对饼图的每一块标注百分比
> browsers<-read.table("browsers.txt",header=TRUE)
> browsers<-browsers[order(browsers[,2]),]
> pielabels <- sprintf("%s = %3.1f%s", browsers[,1],
+ 100*browsers[,2]/sum(browsers[,2]), "%")#
> pie(browsers[,2],
+ labels=pielabels,
+ clockwise=TRUE,
+ radius=1,
+ col=brewer.pal(7,"Set1"),
+ border="white",
+ cex=0.8,
+ main="Percentage Share of Internet Browser usage")

添加图例
> browsers<-read.table("browsers.txt",header=TRUE)
> browsers<-browsers[order(browsers[,2]),]
> pielabels <- sprintf("%s = %3.1f%s", browsers[,1],
+ 100*browsers[,2]/sum(browsers[,2]), "%")
> pie(browsers[,2],
+ labels=NA,
+ clockwise=TRUE,
+ col=brewer.pal(7,"Set1"),
+ border="white",
+ radius=0.7,
+ cex=0.8,
+ main="Percentage Share of Internet Browser usage")
> legend("bottomright",legend=pielabels,bty="n",
+ fill=brewer.pal(7,"Set1"))#注意这里是用fill加颜色。col是添加点、线图例的颜色。然而对于饼图,并没有图例,只有颜色区分,所以用fill会增加一个相应颜色的方框。
频数 频率图
air<-read.csv("airpollution.csv")#默认是频数图
hist(air$Nitrogen.Oxides,
xlab="Nitrogen Oxide Concentrations",
main="Distribution of Nitrogen Oxide Concentrations")

hist(air$Nitrogen.Oxides, freq=FALSE,#改为频率图。freq默认为TRUE.相反,有个probability参数默认为FALSE。更改这两个参数都可以控制频数 频率图
xlab="Nitrogen Oxide Concentrations",
main="Distribution of Nitrogen Oxide Concentrations")

自定义宽度/组数。
hist(air$Nitrogen.Oxides,
breaks=20,xlab="Nitrogen Oxide Concentrations",#分成20组,但结果并不一定是20,R会自动判断,尽量靠近20。下面的方法更精确。
main="Distribution of Nitrogen Oxide Concentrations")

hist(air$Nitrogen.Oxides,
breaks=c(0,100,200,300,400,500,600),#另一种表示方法。(有多种,参加帮助)
xlab="Nitrogen Oxide Concentrations",
main="Distribution of Nitrogen Oxide Concentrations")

调整颜色,边界,坐标轴
hist(air$Respirable.Particles,
prob=TRUE,col="black",border="white",
xlab="Respirable Particle Concentrations",
main="Distribution of Respirable Particle Concentrations")

par(yaxs="i",las=1)#y轴坐标间隔的设置方式。las设置x,y轴的文字方向。
hist(air$Respirable.Particles,
prob=TRUE,col="black",border="white",
xlab="Respirable Particle Concentrations",
main="Distribution of Respirable Particle Concentrations")
box(bty="l")
grid(nx=NA,ny=NULL,lty=1,lwd=1,col="gray")#不画垂直于x轴没有,垂直于y轴的则按默认的画。

添加一条密度曲线
par(yaxs="i",las=1)
hist(air$Respirable.Particles,
prob=TRUE,col="black",border="white",
xlab="Respirable Particle Concentrations",
main="Distribution of Respirable Particle Concentrations")
box(bty="l")
lines(density(air$Respirable.Particles,na.rm=T),col="red",lwd=4)#na.rm表示对缺失值的处理方式,True的话,相应的x会被移除(rm=remove)
grid(nx=NA,ny=NULL,lty=1,lwd=1,col="gray")

把直方图加入pair plot
panel.hist <- function(x, ...)
  {
    par(usr = c(par("usr")[1:2], 0, 1.5) )#这里,表示usr的前两个参数不变(即x不变),后两个改成0和1.5.即改了y轴
    hist(x, prob=TRUE,add=TRUE,col="black",border="white")#add表示,图是加在原来的图上,而不是新的开一幅图。
  }
plot(iris[,1:4],
main="Relationships between characteristics of iris flowers",
pch=19,col="blue",cex=0.9,
diag.panel=panel.hist)#即把对角线的面板画成上面函数那样


把直方图画在散点图的边缘
#Set up the layout first
layout(matrix(c(2,0,1,3),2,2,byrow=TRUE), widths=c(3,1), 
heights=c(1,3), TRUE)#把画图面板分区。也可以用mfrow,mfcol,但layout更加灵活控制不同的高度宽度。TRUE指,行的一个单位的长度=列的一个单位的长度。

matrix(c(2,0,1,3),2,2,byrow=TRUE)#这里,即第一幅图画在第二行第一列。第二幅图画在第一行第一列,第三幅图画在第二行第二列。后面的建图的顺序需要一一对应。
     [,1] [,2]
[1,]    2    0
[2,]    1    3

#Make Scatterplot。
par(mar=c(5.1,4.1,0.1,0))
plot(air$Respirable.Particles~air$Nitrogen.Oxides,
pch=19,col="black",
xlim=c(0,600),ylim=c(0,80),
xlab="Nitrogen Oxides Concentrations",
ylab="Respirable Particle Concentrations")

#Plot histogram of X variable in the top row
par(mar=c(0,4.1,3,0))
hist(air$Nitrogen.Oxides,
breaks=seq(0,600,100),ann=FALSE,axes=FALSE,#不画坐标轴
col="black",border="white")

#Plot histogram of Y variable to the right of the scatterplot
yhist <- hist(air$Respirable.Particles,
breaks=seq(0,80,10),plot=FALSE)#plot=FALSE,先不画图。

par(mar=c(5.1,0,0.1,1))
barplot(yhist$density,
horiz=TRUE,space=0,axes=FALSE,
col="black",border="white")

  

  

posted @ 2017-02-16 17:31  qjtsjtu  阅读(419)  评论(0编辑  收藏  举报