ggplot2回顾(8): 标度

其实在看这一章之前,我还不怎么能理解“标度”这个词到底指什么。现在有些想法了,比如将一个离散型变量向颜色这个图形属性做映射,变量有几种值就会选用几种颜色,问题是“用什么颜色?”

这就是标度,它被用来完成图形属性映射之后的一些事情。再比如,将一个连续型变量映射给x轴,x轴上面哪些地方有无刻度,x轴的显示范围都需要“标度”来控制。

这张图很有用,你能很清楚的知道图形属性和变量类型一定时,默认的标度是什么,可选的标度有哪些。当然有一些不太常用。

1. 举个例子——关于图例

1.1 修改标度的参数以改变图例的标题和标签
ggplot(data = msleep, aes(x = sleep_total, y = sleep_cycle, color = vore)) +
  geom_point() +
  scale_color_hue(
    "legend of vore",
    breaks = c("carni", "herbi", "insecti", "omni", NA),
    labels = c("a", "b", "c", "d", "e")
  )

怎么知道是scale_color_hue()这个标度函数的,根据上面的表格。

1.2 改变颜色

如果不设置na.value,最后值为NA的点不会画出来

ggplot(data = msleep, aes(x = sleep_total, y = sleep_cycle, color = vore)) +
  geom_point() +
  scale_color_brewer(palette = "Set1", na.value = "#FC8D62")

breaks, labels, na.value后面会多次提到

2. 标度的通用参数(对x,y,color这些图形属性都适用)

2.1 name

用法:类似scale_x_continuous("xxx")或xlab("xxx"),一种简写。上文中改写图例的名称也用到了。

2.2 limits

用法:类似scale_x_continuous(limits = c(0,15))或xlim(0,15);离散变量是xlim(c("Good","Fair"))
作用:一般用来限定坐标轴的范围,只有处于这个范围内的数据会被拿来画图。

2.3 breaks

作用:设置刻度出现的位置
用法:scale_x_continuous(breaks = c(0,2,4))

2.4 labels

作用:断点处显示的标签
用法:必须和breaks同时存在,scale_x_continuous(breaks = c(0,2,4),labels = c("a","b","c"))

2.5 na.value的妙用

如果想在画图过程中,将超过某一范围的点全都重置为边界值,可以使用它。下图将x=(0,3)之外的点全都画到x=0的位置。

diamonds%>%ggplot(aes(x=carat,y=price))+geom_point()+scale_x_continuous(limits = c(0,3),na.value = 0)
一个重要参数expand

通常图画完之后,画板的范围并不是我们指定的范围,拿上面的图为例,我规定的是x=(0,3),但是两边还是有一些空白区域。一般空白区域是左右各延伸5%的自变量范围。

expand=c(a,b)
扩展画板的范围,假设变量范围是(d=max-min),现在画板的范围是
从min-(a*d+b)到max+(a*d+b)

test_df2 <- data.frame(
  x=c(1,2),
  y=c(100,200)
)
test_df2%>%ggplot(aes(x,y))+geom_point(size=4)+
scale_x_continuous(expand = c(3,1)) 
#现在x轴的范围是-3到6

3. 位置标度

3.1 连续型

scale_x_continuous()
scale_y_continuous()
trans参数的使用

3.2 日期和时间
p <- economics%>%ggplot(aes(date,psavert))+geom_line()+geom_hline(yintercept=0,color="grey")
p
p+scale_x_date(breaks = date_breaks("10 years"))
p+scale_x_date(
  limits = as.Date(c("2004-1-1","2005-1-1")),
  labels = date_format()
)
3.3 离散型

4. 颜色标度

4.1 连续型
双色梯度(low high两个参数)

scale_color_gradient()
scale_fill_gradient()

三色梯度(low mid high三个参数)

scale_color_gradient2()
scale_color_gradient2()

n色梯度

scale_color_gradientn()
scale_fill_gradientn()

一个例子
faithful%>%ggplot(aes(eruptions,waiting))+geom_point()
f2d <- with(faithful,MASS::kde2d(eruptions,waiting,h=c(1,10),n=50))
df <- with(f2d,cbind(expand.grid(x,y),as.vector(z)))
colnames(df) <- c("eruptions","waiting","density")
erupt <- df%>%ggplot(aes(waiting,eruptions))+geom_tile(aes(fill=df$density))+
  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="black",high="red")
erupt+scale_fill_gradient2(limits=c(-0.04,0.04),midpoint = mean(df$density),low = "green",high = "red",mid = "black")
#midpoint可以理解为中间色,默认情况下0赋给中间色,此处调整后均值赋给中间色
erupt+scale_fill_gradientn(colors=c("red","black","green","yellow"),limits=c(-0.04,0.04))

纯黑色并不是对应0,而是0上面一点点,这个值是均值。

其实可以看出来,瓦片图可以用来画热图。

4.2 离散型
使用RColorBrewer

scale_color_brewer(palette = "Set1")
scale_fill_brewer(palette = "Set1")

手动更改

scale_color_manual(values = c(......))
下文有

5. 手动离散型标度(重要参数values=c(...))

scale_shape_manual()
scale_linetype_manual()
scale_color_manual()

huron <- data.frame(year = 1875:1972, level = LakeHuron)
ggplot(huron, aes(year)) +
  geom_line(aes(y = level - 5,color="a")) +
  geom_line(aes(y = level + 5,color="b"))+
  scale_color_manual("legend",values=c("a"="blue","b"="red","NA"="orange"))

除了手动离散型标度外,这段代码还有另一个知识点:在aes()里面给一个图形属性映射单个值,可以生成图例。

6. 坐标轴与图例

6.1 通用参数

name: 坐标轴和图例的标题
breaks, labels
上文有

6.2 整体外观(由theme控制)

theme(axis.*,
legend.*)

6.3 网格线的设置

theme(panel.grid.minor = element_blank(),
panel.grid.major = element_blank())

6.4 图例的位置(可选:"right","left","top","bottom","none",c(0.5,0.5))

theme(legend.position =)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,117评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,963评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,897评论 0 240
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,805评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,208评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,535评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,797评论 2 311
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,493评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,215评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,477评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,988评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,325评论 2 252
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,971评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,807评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,544评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,455评论 2 266

推荐阅读更多精彩内容