ggplot绘图学习笔记

0、查看R的系统帮助文档

 

标度 scale

breaks, labels, limits, labs

 

dose <- c(20, 30, 40, 45,60)
drugA <- c(16, 20, 27, 40, 60)
drugB <- c(15, 18, 25, 31, 40) # 数据准备

opar <- par(no.readonly=T) # 保存画图环境

par(lwd=2, cex=1.5, font.lab=2) # 设置画图环境
plot(dose, drugA, type="b", pch=15, lty=1, col="red", ylim=c(0,60), main="Drug A vs. Drug B",
     xlab="Drug Dosage", ylab="Drug Response") # 画药物A
lines(dose, drugB, type="b", pch=17, lty=2, col="blue") # 在原来的图形上画药物B

abline(h=c(30), lwd=1.5, lty=2, col="grey") # 添加水平参考线x=30

install.packages("Hmisc") # 安装坐标轴精度的packages
library(Hmisc)

minor.tick(nx=3, ny=3, tick.ratio=0.5) # 设置次要刻度线是主刻度线的一半

legend("topleft", inset=.05, title="Drug Type", c("A", "B"),
       lty=c(1,2), pch=c(15,17), col=c("red", "blue")) # 添加图例

par(opar) #恢复原来的图形环境

 

 

 

1、不同Data Set数据在同一图中展示

huron <- data.frame(year = 1875:1972, level = LakeHuron)

ggplot(huron, aes(year))+
geom_line(aes(y = level - 5, colour = "below")) + 
geom_line(aes(y = level + 5, colour = "above")) + 
scale_colour_manual("Direction", values = c("below" = "blue", "above"="red")) +
scale_y_continuous("Different level")

 


2、调整X,Y和标题的字体外观等

简单画出click随时间的变化图,如下:
p + geom_line(aes(y = click)) + labs(title = "this is a test",x = "date",y = "click") # 标题="this is a test" ,x = date, y = click  

修改上图的标题,XY轴的外观,如下:
> last_plot() #上面画的图+ theme(plot.title = element_text(size=20,colour = "blue",face = "bold"),axis.title.x = element_text(size=15,colour = "black",face = "bold"),axis.text.y = element_text(colour = "red"),axis.line = element_line(colour = "red",size = 5),panel.grid.major = element_line(colour="red"))# 标题设置为"大小20,蓝色,加粗;X标题设置为"大小15,黑色,加粗",Y的标签设置为"红色" 


上图中,为了明显区分XY的标题和标签设置,所以单独设置了axis.title.x和axis.text.y。当然,以此类推,也可以单独设置axis.title.y和axis.text.y,这样可以画更特别的图形。
另,上图还单独设置了坐标轴线(axis.line),以及背景网格线的颜色和大小(panel.grid.major)。相信有了这些单独的设置,可以满足大多数画图的需求。

特别注意:如果panel.grid.major 和panel.background = element_blank(),则会看到白底的图形。更多细节展示,见P152。


3、迭代和绘图模板

上图绘制中使用了last_plot(),以及通过"+"一步步添加其他图层和修改坐标轴和图例,得到自己想要的图形。实际工作中,在没有完全了解数据展示情况下,首先绘制基础图形,然后通过"last_plot() + "一步步得到自己想要的图形,比如:
p <- ggplot() # 基础图形
last_plot() + geom_line(data = x,aes(dt,click,colour = "blue")) # 画x数据集中的click随dt变化趋势线
last_plot() + geom_line(data = y,aes(dt,click,colour = "red)) # 画y数据集中click随dt变化,跟x做一个对比
last_plot() + labs(title = "Campare of Y and X's click",xlab = "Date",ylab = "Click") # 添加标题和坐标轴标签
...

以此类推,一步步得到自己想要的图形。

另,在不停重复画图过程中,很多图形使用的标题和坐标轴选项,或者颜色面板的设置都是一样的,因此,我们可以制作一个绘图模板,一次制作,永久使用。 其实很简单,就是把常用的绘图的设置代码做个“封装”,何为封装?简单啦,qplot就是个封装的函数,我们也可以做任意的不同的封装,比如:
xquiet <- scale_x_continuous("",breaks = NULL)
yquiet <- scale_y_continuous("",breaks = NULL)
quiet <- xquiet + yquiet
p <- ggplot(data = x,aes(dt,click,colour = "blue")) + quiet

后续画其他图形的时候,如果涉及到scale_x和scale_y的设置编辑,都可以直接"+ quiet",这样在复杂图形绘制中省去了很多的麻烦。
每个人的审美观和使用习惯都不一样,所以自己可以定做个人绘图模板,以后就顺手拈来,不用每次都吭哧吭哧的去单独写代码。

 

 

 

4 Oxboys成长轨迹查看

library(nlme)
boysbox <- ggplot(Oxboys, aes(Occasion, height)) + geom_boxplot()
boysbox + geom_line(aes(group=Subject), colour = "#3366FF")

 

4 不同几何对象

df <- data.frame(x = c(3, 1,5), y = c(2, 4, 6), label = c("a", "b", "c"))
p <- ggplot(df, aes(x,y)) + xlab(NULL) + ylab(NULL)
p
+ geom_point() + labs(title = "geom_point") p + geom_bar(stat="identity") + labs(title = "geom_bar(stat=\"identity\")") p + geom_line() + labs(title = "geom_line") p + geom_area() + labs(title = "geom_area") p + geom_path() + labs(title = "geom_path") p + geom_text(aes(label = label)) + labs(title = "geom_text") p + geom_tile() + labs(tilte = "geom_tile") p + geom_polygon() + labs(title = "geom_polygon")

 

5 箱线图

 

 

library(plyr)
qplot(cut, depth, data = diamonds, geom = "boxplot") #离散
qplot(carat, depth, data = diamonds, geom = "boxplot", group = round_any(carat, 0.1, floor),xlim = c(0, 3)) #连续->离散

 

6 处理遮盖问题

 

df <- data.frame(x = rnorm(200), y = rnorm(200))
norm <- ggplot(df, aes(x, y))
norm + geom_point(size = 2.5)
norm + geom_point(size = 2.5, shape = 1)
norm + geom_point(size = 2.5, shape = ".")

 

7 添加文本

 

unemp <- qplot(date, unemploy, data = economics, geom = "line", xlab = "", ylab = "No .unemployed(1000s)")
presidential <- presidential[-(1:3), ]
yrng <- range(economics$unemploy)
xrng <- range(economics$date)

unemp + geom_vline(aes(xintercept = as.numeric(start)), data = presidential)

last_plot() + geom_text(aes(x = start, y = yrng[1], label = name), data = presidential, size = 3, hjust = 1, vjust = 0)

caption <- paste(strwrap("Unemploymen rates in the US have varied a lot over the years", 40), collapse = "\n")
unemp + geom_text(aes(x , y, label = caption), data = data.frame(x = xrng[2], y = yrng[2]), hjust = 1, vjust = 1, size = 4)

 

 

posted @ 2014-07-09 10:47  kongmeng  阅读(1265)  评论(0编辑  收藏  举报