搜索
查看: 540|回复: 0

[R] 小洁详解《R数据科学》--第21章 图形化沟通

[复制链接]

25

主题

50

帖子

370

积分

中级会员

Rank: 3Rank: 3

积分
370
发表于 2018-11-26 14:37:58 | 显示全部楼层 |阅读模式
1.准备工作
[AppleScript] 纯文本查看 复制代码
library(ggplot2)
library(tidyverse)
##另外两个扩展包用显式引用,不加载了

2. 标签
也就是label 可以实行的修改有:
(1)标题类
标题title、副标题subtitle、右下角caption
[AppleScript] 纯文本查看 复制代码
#书上的代码有误,paste没加逗号而且少一个括号
ggplot(mpg, aes(displ, hwy)) +
geom_point(aes(color = class)) +
geom_smooth(se = FALSE) +
labs(title ="Fuel efficiency generally decreases withengine size")
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

加上副标题和右下角:
[AppleScript] 纯文本查看 复制代码
#书上的代码又是多处错误
ggplot(mpg, aes(displ, hwy)) +
geom_point(aes(color = class)) +
geom_smooth(se = FALSE) +
labs(title = "Fuel efficiency generally decreases with engine size",
subtitle =
"Two seaters (sports cars) are an exception because of their light weight",
caption = "Data from fueleconomy.gov"
)

## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
(2) 坐标轴和图例标题
默认的坐标轴、图例标题都是变量名
[AppleScript] 纯文本查看 复制代码
ggplot(mpg, aes(displ, hwy)) +
geom_point(aes(color = class)) +
geom_smooth(se = FALSE) +
labs(
x = "Engine displacement (L)",
y = "Highway fuel economy (mpg)",
colour = "Car type"
)
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
坐标轴标题用数学公式替代
[AppleScript] 纯文本查看 复制代码
df <- tibble(
x = runif(10),
y = runif(10)
)
ggplot(df, aes(x, y)) +
  geom_point() +
  labs(
      x = quote(sum(x[i] ^ 2, i == 1, n)),
      y = quote(alpha + beta + frac(delta, theta))
)
3. 注释
文字注解,geom_text() 结合label
跳过有问题的 直接看比较好的啦
亮点:圈出了想要标记的点,自动调整标签位置以免重叠
[AppleScript] 纯文本查看 复制代码
best_in_class <- mpg %>%
group_by(class) %>%
filter(row_number(desc(hwy)) == 1)
ggplot(mpg, aes(displ, hwy)) +
geom_point(aes(color = class)) +
geom_point(size = 3, shape = 1, data = best_in_class) +
ggrepel::geom_label_repel(
aes(label = model),
data = best_in_class
)
不显示图例,直接把颜色分类依据覆盖在原图上
[AppleScript] 纯文本查看 复制代码
class_avg <- mpg %>%
group_by(class) %>%
summarize(
displ = median(displ),
hwy = median(hwy)
)
ggplot(mpg, aes(displ, hwy, colour = class)) +
  ggrepel::geom_text_repel(aes(label = class),
    data = class_avg,
    size = 6,
    label.size = 0,
    segment.color = "blue"
  ) +
  geom_point() +
  theme(legend.position = "none")
## Warning: Ignoring unknown parameters: label.size
我发现我运行出的结果和中文书英文书结果都不一样,这就比较怀疑人生。然后简单研究了一下ggrepel这个包,发现中文书的代码应该是把geom_label_repel改成了geom_text_repel,而segment.color指的是引导线的颜色,根本没必要设置,因为设置的点比较少,并不会出现引导线。(后来又感觉毫无意义)
关于引导线的理解运行下面代码即可,改动下面的颜色就可以知道设置的是哪里啦。
[AppleScript] 纯文本查看 复制代码
ggplot(mtcars,
            aes(wt, mpg, label = rownames(mtcars), colour = factor(cyl))) +
  geom_point()+
geom_label_repel(aes(fill=factor(cyl)), colour="white", segment.colour="blue")
[AppleScript] 纯文本查看 复制代码
(label <- mpg %>%
summarize(
displ = max(displ),
hwy = max(hwy), #这个是最右上角那个点的坐标
label =
"Increasing engine size is \nrelated to decreasing fuel economy."
))
## # A tibble: 1 x 3
##   displ   hwy label                                                       
##   <dbl> <dbl> <chr>                                                       
## 1     7    44 "Increasing engine size is \nrelated to decreasing fuel eco…
[AppleScript] 纯文本查看 复制代码
ggplot(mpg, aes(displ, hwy)) +
geom_point() +
geom_text(
aes(label = label), #label那一列赋值给label参数
data = label, #label数据框
vjust = "top",
hjust = "right" #这是让点位于label的右上角
)
让label紧贴右上角
[AppleScript] 纯文本查看 复制代码
#又是一段paste错代码
label <- tibble(
displ = Inf,
hwy = Inf,
label = 
"Increasing engine size is \nrelated todecreasing fuel economy."
)
ggplot(mpg, aes(displ, hwy)) +
geom_point() +
geom_text(
aes(label = label),
data = label,
vjust = "top",
hjust = "right"
)
4.标度
指的是坐标轴上的刻度、名称和图例单行的名称
图例布局:整体位置通过theme(legend.position)来设置,left、right、top、botttom和none可选。
颜色映射可用scale_color_brewer(palette = “”)调整, http://colorbrew2.org 给出了很多分类标度使用的配色, 使红绿对比更强烈,即使患有红绿色盲症也可区分。 scale_color_viridis()则给出了连续模拟(成为渐变色)
形状映射则可以在黑白图中发挥作用。
5.缩放
coord_cartesian()可设置 xlim 和 ylim 参数值,以确定缩放范围。这是局部放大,模拟曲线还是按照所有数据来做的,不同于取子集。
同一张图拆分(缩放)为系列图形,使用同样的标度:
先将标度设置好并赋值,后添加。
[AppleScript] 纯文本查看 复制代码
suv <- mpg %>% filter(class == "suv")
compact <- mpg %>% filter(class == "compact")

x_scale <- scale_x_continuous(limits = range(mpg$displ))
y_scale <- scale_y_continuous(limits = range(mpg$hwy))
col_scale <- scale_color_discrete(limits = unique(mpg$drv))

ggplot(suv, aes(displ, hwy, color = drv)) +
geom_point() +
x_scale +
y_scale +
col_scale
[AppleScript] 纯文本查看 复制代码
ggplot(compact, aes(displ, hwy, color = drv)) +
geom_point() +
x_scale +
y_scale +
col_scale
6.主题theme
默认的主题是灰色背景白线格子,可通过theme修改
[AppleScript] 纯文本查看 复制代码
ggplot(mpg, aes(displ, hwy)) +
geom_point(aes(color = class)) +
geom_smooth(se = FALSE) +
theme_bw()
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
7.保存图形-ggsave()
ggplot我写了详细的一个系列,应该也很好理解^_^
[size=0em]​




上一篇:小洁详解《R数据科学》--第20章 R Markdown
下一篇:小洁详解《R数据科学》--第22章 R Markdown 输出格式
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|生信技能树 ( 粤ICP备15016384号  

GMT+8, 2019-9-22 02:09 , Processed in 0.029891 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.