前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ggplot2包图形参数(坐标轴、分面、配色)整理

ggplot2包图形参数(坐标轴、分面、配色)整理

作者头像
DataCharm
发布2021-02-22 15:03:22
10.5K0
发布2021-02-22 15:03:22
举报

R具有强大的统计计算功能和便捷的数据可视化系统。目前R主要支持四套图形系统:基础图形(base)、网格图形(grid)、lattice图形和ggplot2。其中ggplot2凭借强大的语法特性和优雅的图形外观,逐渐成为R中数据可视化的主流选择。

《R数据可视化手册》重点讲解R的绘图系统,指导读者通过绘图系统实现数据可视化,主要侧重于解决具体问题,是R数据可视化的实战秘籍。书中绝大多数的绘图案例都是以强大、灵活制图而著称的R包ggplot2实现的,充分展现了ggplot2生动、翔实的一面。

本文根据《R数据可视化手册》整理ggplot2包的图形参数(图形外观、注解、图例、坐标轴、分面、配色)。


目 录

  • 4 坐标轴
    • 4.1 交换x轴和y轴
    • 4.2 坐标轴显示直线
    • 4.3 设置连续型坐标轴范围
    • 4.4 坐标轴顺序
    • 4.5 设置坐标轴缩放比例
    • 4.6 刻度线和刻度标签
    • 4.7 坐标轴标签
    • 4.8 对数坐标轴
    • 4.9 绘制环状图形
    • 4.10 日期坐标轴
  • 5. 分面
    • 5.1 使用分面将数据分割绘制到子图中
    • 5.2 在不同坐标轴下使用分面
    • 5.3 修改分面的文本标签
    • 5.4 修改分面标签和标题的外观
  • 6. 配色
    • 6.1 设置对象的颜色
    • 6.2 将变量映射到颜色上
    • 6.3 对离散型变量使用不同的调色板
    • 6.4 对离散型变量使用自定义调色板
    • 6.5 使用色盲友好型调色板
    • 6.6 对连续性变量使用自定义调色板
    • 6.7 根据数值设定阴影颜色
  • End

4 坐标轴

4.1 交换x轴和y轴

代码语言:javascript
复制
coord_flip() # 翻转坐标轴

4.2 坐标轴显示直线

代码语言:javascript
复制
# 显示坐标轴直线,并设置为黑色
theme(axis.line = element_line(colour="black")) 
其他参数:大小size;
两边界线末端仅部分重叠,完全重叠设置:lineend="square";

4.3 设置连续型坐标轴范围

代码语言:javascript
复制
xlim() # 设置连续性x轴的最小值和最大值
ylim() # 同上
ylim(0, max(PlantGrowth$weight)) # y轴最大值为weight变量的最大值

ylim()是scale_y_continuous()设定范围的简便写法。

调整参数limits可以设定x轴范围
scale_y_continuous(limits=c(0, 10)) # 设定范围0-10,x轴同理

注意:ggplot2包有两种设置值域的方式,第一种是修改标度;第二种是应用一个坐标变换。当你修改x标度和y标度的范围时,任何在范围以外的数据都会被移除,换言之,超出范围的数据不仅不会被展示,而且会被完全移出考虑处理的数据范围,统计量的计算都会基于修剪后的数据

通过坐标变换,数据则不会被修剪。从本质上讲,只是将数据放大或缩小到指定的范围。

代码语言:javascript
复制
coord_cartesian(ylim = c(5, 6.5))

4.4 坐标轴顺序

4.4.1 反转连续型坐标轴
代码语言:javascript
复制
xlim(6.5, 3.5)  # 指定反序范围反转,先写最大值,再写最小值
scale_x_reverse()   # 反转x轴,不设定值域范围
scale_x_reverse(limits=c(8, 0))   # 反转x轴并设定值域范围
以上y轴同理
4.4.2 离散型坐标轴
代码语言:javascript
复制
设定参数limits来修改坐标轴顺序
scale_x_discrete(limits=c("trt1","ctrl","trt2")) 
如忽略因子中某些类别,则输入:limits=c("trt1","ctrl")

反转因子顺序
scale_x_discrete(limits=rev(levels(PlantGrowth$group)))
# PlantGrowth$group为因子变量

4.5 设置坐标轴缩放比例

代码语言:javascript
复制
coord_fixed() # 默认1:1,指坐标轴单位长度表示的数值范围是1:1
coord_fixed(ratio=1/2)  # 通过设定参数ratio可以指定其他固定比例

可以在scale_y_continuous()scale_x_continuous()中调整参数breaks,从而将刻度间距设为相同。

代码语言:javascript
复制
p + coord_fixed() +
scale_y_continuous(breaks=seq(0, 420, 30)) +
scale_x_continuous(breaks=seq(0, 420, 30))

4.6 刻度线和刻度标签

4.6.1 移除刻度线、刻度标签和网格线
代码语言:javascript
复制
theme(axis.ticks=element_blank()) # 移除两坐标轴刻度线,无法仅隐藏单个坐标轴的刻度线
theme(axis.text.x = element_blank()) # 仅移除x轴刻度标签,y轴同

scale_y_continuous(breaks=NULL) 
# 移除y轴刻度线、刻度标签和y轴网格线,仅对连续型坐标轴有效
4.6.2 设置刻度线位置
代码语言:javascript
复制
调整参数breaks可以修改刻度线的位置
scale_y_continuous(breaks=c(4, 5, 6, 7,8))  # x轴同理
使用seq()函数可以生成刻度线的位置向量,如seq(4, 8, by=1)
4.6.3 修改刻度标签文本
代码语言:javascript
复制
调整参数labels可以修改刻度标签文本
scale_y_continuous(breaks=c(50, 56), 
                   labels=c("Tiny", "short"))
# 标签较长可以使用换行符(\n)另起一行。
4.6.4 修改刻度标签外观

对于较长的标签,可以使用旋转角度或者另起一行的方式来增加可阅读性。

代码语言:javascript
复制
theme(axis.text.x = element_text(angle=30, hjust=1, vjust=1)) 
# 刻度标签旋转30°
# 参数hjust和vjust设置横向对齐(左对齐/居中/右对齐)和纵向对齐(顶部对齐/居中/底部对齐)。
# 其他文本属性包括大小size、颜色colour、样式face和字体族family等;
# size=rel(0.9))意为当前主题基础字体大小的0.9倍。

4.7 坐标轴标签

4.7.1 移除坐标轴标签
代码语言:javascript
复制
theme(axis.title.x=element_blank()) # 移除x轴标签,不留出空白空间
xlab("")  # 通过设置空字符来不显示x轴标签,但是会留出空间,表示存在空白文本
# 以上y轴同
4.7.2 修改坐标轴标签文本
代码语言:javascript
复制
xlab() # 修改x轴标签文本
ylab() # 修改y轴标签文本

labs(x = "x轴标签", y = "y轴标签") 
scale_x_continuous(name="x轴标签") 
# scale_y_continuous()、scale_x_discrete()也适用
4.7.3 修改坐标轴标签外观
代码语言:javascript
复制
theme(axis.title.x=element_text(face="italic", colour="darkred", size=14))
可以设置旋转angle、对齐(hjust/vjust)、大小size、颜色colour、样式face和字体簇family等;
y轴一般不旋转,而是用\n表示另起一行;

4.8 对数坐标轴

4.8.1 转换为对数坐标轴
代码语言:javascript
复制
scale_x_log10() # x轴为对数轴
scale_y_log10() # y轴为对数轴
4.8.2 对数坐标轴刻度标签
代码语言:javascript
复制
scale_x_log10(breaks=10^(-1:5))  # 值域过大会自动输出为科学记数法
scale_y_log10(breaks=10^(0:3))

scales包的trans_format()函数可使刻度标签使用指数记数法
library(scales)
scale_x_log10(breaks=10^(-1:5), 
              labels=trans_format("log10", math_format(10^.x))) 
4.8.3 对数坐标轴刻度位置

较复杂,有需要建议参考《R数据可视化手册》。

4.9 绘制环状图形

较复杂,有需要建议参考《R数据可视化手册》。

4.10 日期坐标轴

时间有关的对象有两类:日期对象(精确到天)和日期时间对象(精确到秒)。

4.10.1 日期坐标轴
代码语言:javascript
复制
坐标轴上的日期刻度间距使用seq()函数设定

datebreaks <- seq(as.Date("1992-06-01"), as.Date("1993-06-01"), by="2 month")
scale_x_date(breaks=datebreaks) # 使用设定的日期刻度分割点

调整日期刻度标签的格式
library(scales) # 使用scales包中的date_format()函数来指定格式
scale_x_date(breaks=datebreaks, labels=date_format("%Y %b"))
日期格式应放入一个字符串中传递给date_format()。

日期刻度标签的外观的调整跟前面刻度参数调整一样。
theme(axis.text.x = element_text(angle=30, hjust=1))

常用的日期格式

4.10.2 时间坐标轴
代码语言:javascript
复制
手动指定刻度分割点和标签
scale_x_continuous(breaks=c(0, 20, 40, 60, 80, 100), labels=c("0:00", "0:20", "0:40", "1:00", "1:20", "1:40"))

其他设定参见《R数据可视化手册》

5. 分面

5.1 使用分面将数据分割绘制到子图中

使用facet_grid()facet_wrap()函数,并指定根据哪个变量来分割数据。

5.1.1 使用facet_grid()分面

进行纵向排布、横向排布或同时进行纵横向排布。

代码语言:javascript
复制
# drv和cyl为数据集中指定进行分割的变量
facet_grid(drv ~ .) # 纵向排列根据drv变量分面
facet_grid(. ~ cyl) # 横向排列根据cyl变量分面
facet_grid(drv ~ cyl) # 同时根据drv纵向、cyl横向分面
5.1.2 使用facet_wrap()分面

使用facet_wrap()时,各子图将像纸上的文字一样被依次横向排布并换行

代码语言:javascript
复制
facet_wrap( ~ class) # class为变量

facet_wrap()默认使用相等数量的行和列,比如说分面为4时,行与列为2x2;分面为5时,为3x3。

修改行与列数目,通过nrowncol赋值实现。

代码语言:javascript
复制
facet_wrap( ~ class, nrow=2)
facet_wrap( ~ class, ncol=4)

分面方向的选择依赖于你更倾向于鼓励读图者进行哪种类型的比较。

5.2 在不同坐标轴下使用分面

使每个分面的坐标轴不一样,将标度设置为"free_x"、"free_y"或"free"。

代码语言:javascript
复制
facet_grid(drv ~ cyl, scales="free_y") # 使用自由的y标度
facet_grid(drv ~ cyl, scales="free") # 使用自由的x标度和y标度

通过设置只有的坐标轴标度,各个子图将拥有自己的坐标轴值域。 无法直接设置各行或各列的值域,但是可以通过丢弃不想要的数据(以缩减值域)或通过添加几何对象geom_blank()(以扩展值域)的方式控制值域的大小。

5.3 修改分面的文本标签

分面变量一般为离散型变量或者分类变量,直接修改分面变量各水平的名称就可以修改分面的文本标签。

代码语言:javascript
复制
# 修改分面变量各水平
levels(数据框名$分面变量)[levels(数据框名$分面变量)=="水平1"] <- "修改后的水平1"
levels(数据框名$分面变量)[levels(数据框名$分面变量)=="水平2"] <- "修改后的水平2"
levels(数据框名$分面变量)[levels(数据框名$分面变量)=="水平3"] <- "修改后的水平3"
5.3.1 贴标函数label_both()

作用:将在每个分面上同时打印出变量的名称和变量的值

代码语言:javascript
复制
facet_grid(drv ~ ., labeller = label_both)
5.3.2 贴标函数label_parsed()

作用:可以读入字符串,并将其作为R数学表达式来解析。 在修改分面变量水平时,各水平可以输入为数学表达式。

代码语言:javascript
复制
facet_grid(drv ~ ., labeller = label_parsed)

注意:上面两个贴标函数适用于facet_grid()函数,可能不适用于facet_wrap()函数。

5.4 修改分面标签和标题的外观

使用主题系统,通过设置strip.text来控制文本的外观,设置strip.background以控制背景的外观。

代码语言:javascript
复制
facet_grid(. ~ Date) +
theme(strip.text = element_text(face="bold", size=rel(1.5)),
      strip.background = element_rect(fill="lightblue", colour="black",
size=1))
# 可以设置背景颜色、边框颜色、边框轮廓粗细、字体大小、颜色、样式、字体簇等。

6. 配色

6.1 设置对象的颜色

对于几何对象,设置colour或者fill参数的值。

代码语言:javascript
复制
ggplot(birthwt, aes(x=bwt)) + 
geom_histogram(fill="red", colour="black")

一般而言,colour参数控制的是线条、多边形轮廓的颜色,而fill参数控制的是多边形的填充色。

对于点形来说,情况略微有些不同。大多数的点形,整个点的颜色是由colour控制的,而不是fi11。例外的情况是21-25号点,它们不仅有填充色,也有边界色。

6.2 将变量映射到颜色上

对于几何对象,将colour或fill参数的值设置为数据中某一列的列名即可。

代码语言:javascript
复制
# 将变量映射到fill 参数
ggplot(cabbage_exp, aes(x=Date, y=Weight, fill=Cultivar)) +
geom_bar(colour="black", position="dodge")
代码语言:javascript
复制
# 将变量映射到点的colour 参数
ggplot(mtcars, aes(x=wt, y=mpg, colour=cyl)) + geom_point()

6.3 对离散型变量使用不同的调色板

不同的调色板

6.3.1 默认调色板
代码语言:javascript
复制
library(gcookbook) # 为了使用数据集
ggplot(uspopage, aes(x=Year, y=Thousands, fill=AgeGroup)) + geom_area() + 
scale_fill_discrete()  # 默认调色板
# + scale_fill_hue() # 也是默认调色板
6.3.2 ColorBrewer调色板

查看ColorBrewer包中的调色板。

代码语言:javascript
复制
library(RColorBrewer) # 加载包
display.brewer.all() # 展示该包中所有的调色板名称

ColorBrewer调色板可以通过名称来选择

代码语言:javascript
复制
scale_fill_brewer(palette="Oranges")  
选择Oranges调色板,还可以选择其他的调色板
6.3.3 灰度调色板

灰度调色板适合黑白打印。标度范围是0~1(其中0对应黑色,1对应白色),灰度调色板的默认范围是0.2~0.8,但这个可以更改。

代码语言:javascript
复制
scale_fill_grey(start=0.7, end=0)
倒转方向并且更改灰度范围

6.4 对离散型变量使用自定义调色板

scale_colour_manual()函数来自定义颜色;填充色标度,使用scale_fill_manual()代替即可。

代码语言:javascript
复制
scale_colour_manual(values=c("red", "blue"))
scale_colour_manual(values=c("#CC6666", "#7777DD"))

参数values向量中的元素顺序自动匹配离散标度对应因子水平的顺序。 查看因子顺序:levels(因子名)

变量是字符型向量而非因子形式,那么它会被自动转化为因子;顺序也默认地按字母表排序。

代码语言:javascript
复制
自定义颜色分配的顺序,可以使用带有名称的向量参数
scale_colour_manual(values=c(m="blue", f="red"))

6.5 使用色盲友好型调色板

使用函数scale_fill_manual(),调色板(cb_palette)用自定义的。

代码语言:javascript
复制
# 自定义调色板(颜色选用对色盲友好的颜色)
cb_palette <- c("#999999", "#E69F00", "#56B4E9", "#009E73", "#F0E442",
                "#0072B2", "#D55E00", "#CC79A7") 
scale_fill_manual(values=cb_palette)

6.6 对连续性变量使用自定义调色板

对连续型变量使用自定义渐变式的调色板,可以是默认颜色、两色渐变scale_colour_gradient()、三色渐变scale_colour_gradient2()和四色渐变scale_colour_gradientn()

代码语言:javascript
复制
两色渐变
scale_colour_gradient(low="black", high="white")

渐变色中间用白色划分
library(scales) # muted()函数需要的包,muted()会针对输入的颜色输出一个饱和度较低的颜色
scale_colour_gradient2(low=muted("red"), mid="white", high=muted("blue"),
midpoint=110)

n个颜色的渐变色
scale_colour_gradientn(colours = c("darkred", "orange", "yellow", "white"))

6.7 根据数值设定阴影颜色

较复杂,有需要参考《R数据可视化手册》。

End

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DataCharm 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 4 坐标轴
    • 4.1 交换x轴和y轴
      • 4.2 坐标轴显示直线
        • 4.3 设置连续型坐标轴范围
          • 4.4 坐标轴顺序
            • 4.4.1 反转连续型坐标轴
            • 4.4.2 离散型坐标轴
          • 4.5 设置坐标轴缩放比例
            • 4.6 刻度线和刻度标签
              • 4.6.1 移除刻度线、刻度标签和网格线
              • 4.6.2 设置刻度线位置
              • 4.6.3 修改刻度标签文本
              • 4.6.4 修改刻度标签外观
            • 4.7 坐标轴标签
              • 4.7.1 移除坐标轴标签
              • 4.7.2 修改坐标轴标签文本
              • 4.7.3 修改坐标轴标签外观
            • 4.8 对数坐标轴
              • 4.8.1 转换为对数坐标轴
              • 4.8.2 对数坐标轴刻度标签
              • 4.8.3 对数坐标轴刻度位置
            • 4.9 绘制环状图形
              • 4.10 日期坐标轴
                • 4.10.1 日期坐标轴
                • 4.10.2 时间坐标轴
            • 5. 分面
              • 5.1 使用分面将数据分割绘制到子图中
                • 5.1.1 使用facet_grid()分面
                • 5.1.2 使用facet_wrap()分面
              • 5.2 在不同坐标轴下使用分面
                • 5.3 修改分面的文本标签
                  • 5.3.1 贴标函数label_both()
                  • 5.3.2 贴标函数label_parsed()
                • 5.4 修改分面标签和标题的外观
                • 6. 配色
                  • 6.1 设置对象的颜色
                    • 6.2 将变量映射到颜色上
                      • 6.3 对离散型变量使用不同的调色板
                        • 6.3.1 默认调色板
                        • 6.3.2 ColorBrewer调色板
                        • 6.3.3 灰度调色板
                      • 6.4 对离散型变量使用自定义调色板
                        • 6.5 使用色盲友好型调色板
                          • 6.6 对连续性变量使用自定义调色板
                            • 6.7 根据数值设定阴影颜色
                            • End
                            领券
                            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档