标度控制着数据到图形属性的映射,当有须要时,ggplot2会自动添加一个默认的标度。咱们确实能够在不了解标度运行原理的状况下画出许多图形,但理解标度并学会如何操纵它们则将赋予咱们对图形更强的控制能力。express
每一种图形属性都拥有一个默认的标度,此标度将在咱们每次使用这个图形属性时被自动添加到图形中,这些标度列于下表中,默认属性粗体显示:ide
图形属性 | 离散型 | 连续型 |
颜色和填充色 | brewer函数 grey3d hueorm identityblog manualit |
gradientio gradient2table gradientnast |
位置 | discrete | continuous date |
形状 | shape identity manual |
|
线条类型 | linetype identity manual |
|
大小 | identity manual |
size |
若是要添加一个不一样的标度或修改默认标度的某些特征,咱们必须构建一个新的标度,而后使用+将其添加到图形上。全部的标度构建器(scale)都拥有一套通用的命名方案,它们以scale_开头,接下来是图形属性的名称(例如:colour_,shape_,或x_)最后以标度的名称结尾(gradien、hue或manual)。好比scale_x_discrete().离散图形的颜色属性的默认标度名为scale_colour_hue(),填充色的Brewer配色标度名为scale_fill_brewer()。
> p <- qplot(sleep_total,sleep_cycle,data=msleep,colour=vore) > p ##默认参数 > p + scale_colour_hue("what does\nit eat?",breaks=c("herbi","carni","omni",NA),labels=c("plants","meats","both","don't know")) ##调整标度的参数
标度详解,可大体分为几组:
1.通用参数
如下参数对全部标度都通用:
> p <- qplot(cty,hwy,data=mpg,colour=displ) ##默认标度下图左1 > p > p + scale_x_continuous("City mpg") ##添加x标签 下图左2 > p + xlab("City mpg") ##添加x标签 与上相同 > p + ylab("Highway mpg") ##添加y标签 > p + labs(x= "City mpg",y = "Hightway mpg",colour = "Displacement") ##添加x、y及colour标度 下图左3 > p + xlab(expression(frac(miles,gallon))) ##x标度为表达式 下图右1 >
> p <- qplot(cyl,wt,data=mtcars) > p ##图第一行 (1,1) > p + scale_x_continuous(breaks = c(5.5,6.5)) ##图第一行 (1,2) > p + scale_x_continuous(limits = c(5.5,6.5)) ##图第一行 (1,3) > p <- qplot(wt,cyl,data=mtcars,colour=cyl) > p ##图第二行 (2,1) > p + scale_colour_gradient(breaks=c(5.5,6.5)) ##图第二行 (2,2) > p + scale_colour_gradient(limits=c(5.5,6.5)) ##图第三行 (2,3)
上图中第一列使用的是默认的breaks和limits,即limits=c(4,8)和breaks=4:8。中间一列从新设置了breaks:绘图区域不变,但刻度和标签的位置都被移动了。
最右列则从新定义了limits,至关多的数据落在了绘图区域以外。
2.位置标度
每幅图都必定拥有两个位置标度,水平位置和竖直位置。ggplot2提供了连续型、离散型以及日期型标度。
咱们能够自行实施变换,好比咱们能够直接绘制log10(x),而不去使用scale_x_log10().这两种作法将在绘图区域生成彻底相同的结果,可是坐标轴和刻度标签倒是不一样的。
> qplot(log10(carat),log10(price),data=diamonds) ##下图左 > qplot(carat,price,data=diamonds) + scale_x_log10() + scale_y_log10() ##下图右 >
上面的图形主体是相同的,但坐标轴上的标签是不一样的。
日期和时间
日期和时间值基本上属于连续型,但在标注坐标轴时有着特殊的处理方式。目前咱们仅支持属于date类的日期值和属于POSIXct类的时间值。若是你的日期和时间值是其余格式的,则须要as.Date()或as.POSIXct()对其进行转换。
有三个参数能够控制坐标轴外观和刻度的位置:major、minor、以及format。
咱们经过绘制下图来演示部分参数的用法:
> library(ggplot2) > library(scales) > plot <- qplot(date,psavert,data=economics,geom="line") + + ylab("Personal saving rates")+ + geom_hline(xintercept = 0,yintercept=0,colour="grey50") > plot ##图为我的储蓄率的时间序列图形,为默认外观
> plot + scale_x_date(breaks = date_breaks("10 years")) ##每隔10年为一断点
> plot + scale_x_date( + limits = as.Date(c("2004-01-01","2005-01-01")), ######使用年月日的格式仅显示在2004年内的图形 + labels = date_format("%Y-%m-%d") + )
3.颜色标度
连续型
根据颜色梯度中的色彩数量划分,共有三类连续型颜色梯度(即渐变色):
颜色梯度一般被用来展现一个二维表面的高度。下面咱们将以faithful数据集的一个二维密度估计表面为例进行说明。
> library(ggplot2) > f2d <- with(faithful,MASS::kde2d(eruptions,waiting,h=c(1,10),n=50)) > df <- with(f2d,cbind(expand.grid(x,y),as.vector(z))) > names(df) <- c("eruptions","waiting","density") > erupt <- ggplot(df,aes(waiting,eruptions,fill=density)) + geom_tile()+ + scale_x_continuous(expand = c(0,0))+ + scale_y_continuous(expand = c(0,0)) > erupt + scale_fill_gradient(limits = c(0,0.04)) 下图左 > erupt + scale_fill_gradient(limits = c(0,0.04),low="white",high="black") 下图中 > erupt + scale_fill_gradient2(limits = c(-0.04,0.04),midpoint=mean(df$density)) 下图右 >
上面左图为默认的颜色梯度,中间为自定义的黑白梯度,右图中点设为密度均值的3点梯度。
离散型
默认的配色方案,即scale_colour_hue(),可经过沿着hcl色轮选取均匀分布的色相来生成颜色。下图展现了应用于点和条形的三种调色板。
> point <- qplot(brainwt ,bodywt,data=msleep,log="xy",colour=vore) > point <- qplot(brainwt ,bodywt,data=msleep,log="xy",colour=vore) > area <- qplot(log10(brainwt),data=msleep,fill=vore,binwith=1) > area <- qplot(log10(brainwt),data=msleep,fill=vore,binwidth=1) > point + scale_colour_brewer(palette = "Set1") ##第一行图左 > point + scale_colour_brewer(palette = "Set2") ##第一行图中 > point + scale_colour_brewer(palette = "Paste11") ##第一行图右 > area + scale_fill_brewer(palette = "Set1") ##第二行图左 > area + scale_fill_brewer(palette = "Set2") ##第二行图中 > area + scale_fill_brewer(palette = "Pastel1") ##第二行图右 >
对于类别型数据点而言,咱们最感兴趣的调色板是“Set1”和“Dark2”,对面积而言则是"Set2","Pastel1"和“Pastel2”和“Accent”。
4.手动离散型标度
离散型标度scale_linetype(),scale_size_discrete()和scale_shape()基本上没有选项,若是想定制这些标度,须要如下手动型标度来建立新的标度:scale_shape_manual(),scale_linetype_manual(),scale_colour_manual()等等。手动型标度拥有一个重要参数values,你可使用它来指定这个标度应该生成的值。如下展现了scale_manual()的使用方法;
> plot <- qplot(brainwt,bodywt,data=msleep,log="xy") > plot + aes(colour = vore)+ + scale_colour_manual(values = c("red","orange","yellow","green","blue")) ##下图左 > colours <- c(carni = "red","NA"="orange",insecti="yellow",herbi="green",omni="blue") > plot + aes(colour = vore) + scale_colour_manual(values = colours) ##下图中 > plot + aes(shape = vore) + scale_colour_manual(values = c(1,2,6,0,23)) ##下图右