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)