R语言ggplot2包之坐标轴详解

引言

我们还可以对图形中的坐标轴进行处理,包括x、y轴对换、设定坐标轴范围、刻度线修改与去除等等。要想对图形玩得转,坐标轴处理精通不可或缺。

坐标轴对换

我们使用coord_flip()函数来对换坐标轴。

library(ggplot2)
library(gcookbook)
ggplot(PlantGrowth, aes(x=group, y=weight)) + geom_boxplot()
ggplot(PlantGrowth, aes(x=group, y=weight)) + geom_boxplot() + coord_flip()

置换x、y轴时有时候会导致某一坐标轴的坐标被逆转。比如说原x轴的数据是从左往右阅读的,在对换后,原来数据会从下往上给呈现。有时这是个问题。如果x是因子,我们可以对其用带参数limits=rev(levels(…))的函数scale_x_discrete()进行修正。

如果是连续变量,我们可以使用函数scale_y_reverse 或者scale_x_reverse来逆转坐标轴。

如果我们想改变分类变量的显示顺序,可以设置scale_x_discrete() or scale_y_discrete()函数就行。

#因子坐标轴
ggplot(PlantGrowth, aes(x=group, y=weight)) + geom_boxplot() + coord_flip() +
scale_x_discrete(limits=rev(levels(PlantGrowth$group)))
#连续变量的逆转
ggplot(PlantGrowth, aes(x=group, y=weight)) + geom_boxplot() + scale_y_reverse()
#改变分类变量顺序
ggplot(PlantGrowth, aes(x=group, y=weight)) + geom_boxplot()+scale_x_discrete(limits=c("trt1","ctrl","trt2"))

设置x,y轴的连续变量范围

我们可以使用xlim()和ylim设置x、y轴的最大最小值。

p <- ggplot(PlantGrowth, aes(x=group, y=weight)) + geom_boxplot()
p + ylim(0, max(PlantGrowth$weight))
#ylim()是对scale_y_continuous()的快速实现。
#其中breaks用来控制刻度。
p + scale_y_continuous(limits=c(0, 10), breaks=NULL)

设置x、y轴刻度相对比例

我们可以设置x、y轴刻度的相对比例,可以是1:1,即一致的长度。也可以让其中一个轴的刻度变得更长一些,或者说两个刻度线之间的距离更大一些。

sp <- ggplot(marathon, aes(x=Half,y=Full)) + geom_point()
#1:1
sp + coord_fixed() +
scale_y_continuous(breaks=seq(0, 420, 30)) +
scale_x_continuous(breaks=seq(0, 420, 30))
#1:2 x轴刻度长度比y轴刻度长度
sp + coord_fixed(ratio=1/2) +
scale_y_continuous(breaks=seq(0, 420, 30)) +
scale_x_continuous(breaks=seq(0, 420, 15))

设置刻度线的位置

ggplot()函数对处理刻度线位置非常擅长,只要改变刻度的间隔即可(这里的刻度线指的是大刻度线)。

如果坐标轴上变量是连续变量,则不会出现小刻度线。

#连续变量
ggplot(PlantGrowth, aes(x=group, y=weight)) + geom_boxplot() +
scale_y_continuous(breaks=c(4, 4.25, 4.5, 5, 6, 8))
#看到没有,刻度线位置已经按照breaks设置的参数改变了
#如果是离散变量,则使用scale_x_discrete函数
#通过limit函数来控制标签的个数和顺序
ggplot(PlantGrowth, aes(x=group, y=weight)) + geom_boxplot() +
scale_x_discrete(limits=c("trt2", "ctrl"))

去除刻度线、刻度标签和网格线

如果想去除刻度标签,我们使用theme(axis.text.y = element_blank())(如果针对x,参数y改成x即可。

如果想去除刻度线,在theme函数中使用axis.ticks.y = element_blank(),如果x、y轴都想去除axis.ticks.y改成axis.ticks即可。

有时候网格线让整个图画显得复杂,我们也可以对此进行去除。breaks的参数值设为NULL就行了。

p <- ggplot(PlantGrowth, aes(x=group, y=weight)) + geom_boxplot()
#去除刻度标签
p + theme(axis.text.y = element_blank())
#去除刻度线
p + theme(axis.ticks.y = element_blank(), axis.text.y = element_blank())
#去除网格线
p + scale_y_continuous(breaks=NULL)

改变刻度标签的内容和显示效果

我们不仅可以改变刻度标签的位置,还可以对标签内容进行修改。

hwp <- ggplot(heightweight, aes(x=ageYear, y=heightIn)) +
geom_point()
hwp + scale_y_continuous(breaks=c(50, 56, 60, 66, 72),
labels=c("Tiny", "Really\nshort", "Short",
"Medium", "Tallish"))
#值得注意的是,若标签太长,可以用\n将文本放到下一行进行显示

为了改变刻度标签的显示效果,我们可以在theme函数中设置element_text参数中angle的值。

bp <- ggplot(PlantGrowth, aes(x=group, y=weight)) + geom_boxplot() +
scale_x_discrete(breaks=c("ctrl", "trt1", "trt2"),
labels=c("Control", "Treatment 1", "Treatment 2"))
#垂直显示
bp + theme(axis.text.x = element_text(angle=90, hjust=1, vjust=.5))
#换个角度显示,angle是控制刻度标签显示的角度
bp + theme(axis.text.x = element_text(angle=30, hjust=1, vjust=1))
#hjust和vjust是为了控制刻度标签在水平方向和垂直方向的位置

改变坐标轴标签内容

刚才改变的是刻度标签,我们有时还想改变各个坐标轴中标签内容。

hwp + xlab("Age in years") + ylab("Height in inches")#hwp在上面例子中已经定义过
#你也可以这么改,两者等价
hwp + labs(x = "Age in years", y = "Height in inches")

我们也可以去除各个坐标轴标签。

hwp+ theme(axis.title.x=element_blank())

改变坐标轴标签的显示效果也同样方便。

hwp + ylab("Height\n(inches)") +
theme(axis.title.y=element_text(angle=90, face="italic", colour="darkred",
size=14))
#这也同样适用于改变刻度线标签的字体、颜色大小。

使用对数坐标轴

我们也可以把坐标轴改变成对数坐标轴形式,使用scale_x_log10() scale_y_log10()。

library(MASS)
p <- ggplot(Animals, aes(x=body, y=brain, label=rownames(Animals))) +
geom_text(size=3)
#只显示标签线
p + scale_x_log10() + scale_y_log10()

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • R语言 解决安装ggplot2报错的问题

    如下所示: install.packages('xxx',repos='http://cran.us.r-project.org') xxx 改为 ggplot2 补充:R包安装时,出现的错误解决合集 如下所示: 1.library(devtools) #error:Error in get(genname, envir = envir) : object 'testthat_print' not found #解决 options("repos" = c(CRAN="htt

  • R语言ggplot2包之注释方式

    引言 光光展示数据对可视化来说,远远不够.还有其他很多信息能够帮助读者解释你的数据.除了标签.坐标轴.图例外,还能够增加注释,比如强调图画的某一区域,添加描述性文本等. 添加文本注释 你可以在图形中添加文本,增加可读性.我们在annotate函数中设置text参数即可. library(ggplot2) library(gcookbook) p <- ggplot(faithful, aes(x=eruptions, y=waiting)) + geom_point() p + annotate

  • R语言 ggplot2改变柱状图的顺序操作

    如下所示: library(ggplot2) library(ggthemes) dt = data.frame(obj = c('A','D','B','E','C'), val = c(2,15,6,9,7)) dt$obj = factor(dt$obj, levels=c('D','B','C','A','E')) ## 设置柱条的顺序 p = ggplot(dt, aes(x = obj, y = val, fill = obj, group = factor(1))) + geom_

  • R语言ggplot2之图例的设置

    引言 图例的设置包括移除图例.改变图例的位置.改变标签的顺序.改变图例的标题等. 移除图例 有时候你想移除图例,使用 guides(). library(ggplot2) p <- ggplot(PlantGrowth, aes(x=group, y=weight, fill=group)) + geom_boxplot() p + guides(fill=FALSE) 改变图例的位置 我们可以用theme(legend.position=-)将图例移到图表的上方.下方.左边和右边. p <-

  • R语言 使用ggplot2绘制好看的分组散点图

    我们以iris数据集为例,该数据集包括花萼的长度和宽度,花瓣的长度和宽度,以及物种,如下图: 本文我们要绘制不同物种下花萼的长度和宽度的分布情况,以及二者之间的相关性关系. 1. 首先载入ggplot2包, library(ggplot2) 2. 然后进行ggplot(data = NULL, mapping = aes(), ..., environment = parent.frame())绘制,在绘制中第一个参数是数据,第二个参数是数据映射,是绘制的全局变量,其中包含的参数有x,y,col

  • R语言ggplot2边框背景去除的实现

    ggplot2是R语言功能强大的可视化包,但是在作图时有很多默认设置(边框,背景等)会影响图片美观度.比如我们用ggolot2做一个简单的柱状图,就会发现有灰色背景和白色线条.对于这一问题给出几种解决方案. ggplot(mtcars)+geom_bar(aes(x=cyl)) 1.theme_classic() 应用R自带的主题,比如theme_classic(),就可以使图片美观许多,不仅背景去掉了,坐标轴也更加清晰,如下图所示: ggplot(mtcars)+geom_bar(aes(x=

  • R语言ggplot2x轴顺序设置自定义颜色的操作

    先声明一下所用的数据集 第一个图如下 这个图主要在于x轴的顺序设置上,如果按不做任何处理的话>3那个就会在2之前,解决方法是b[,1]<-factor(b[,1],levels=c('2','3',">3")),这句代码可以重新设置因子的级别 完整代码如下: a[,1]<-factor(a[,1],levels=c('2','3',">3")) ggplot(a,aes(x=a[,1],y=a[,2]))+geom_bar(stat=&

  • R语言ggplot2包之坐标轴详解

    引言 我们还可以对图形中的坐标轴进行处理,包括x.y轴对换.设定坐标轴范围.刻度线修改与去除等等.要想对图形玩得转,坐标轴处理精通不可或缺. 坐标轴对换 我们使用coord_flip()函数来对换坐标轴. library(ggplot2) library(gcookbook) ggplot(PlantGrowth, aes(x=group, y=weight)) + geom_boxplot() ggplot(PlantGrowth, aes(x=group, y=weight)) + geom

  • R语言基本对象类型知识点详解

    基本向量 包含单类型对象(例如整数,浮点数,复数,文本,逻辑值或者原始型数据)的向量 复合对象 包含一些列基本向量的数据结构,例如列表,配对列表,``S4对象或者环境. 这些对象的特性各不相同,但它们都包含一系列命名的对象 特殊对象 在R编程中服务于特定目的的对象,例如any,NULL和...等. 这类对象在特定的环境中具有十分重要的意义,但是无法创建一个属于该类型的对象 R语言 R代码,其被执行后可以返回其他对象 函数 R的引擎; 其以参数作为输入,同时返回一些对象作为输出 有时候,函数会修改

  • R语言判断语句的使用详解

    判断结构要求程序员指定一个或多个要评估或测试的条件,以及条件为真时要执行的语句(必需的)和条件为假时要执行的语句(可选的). 下面是大多数编程语言中典型的判断结构的一般形式: R 语言提供了以下类型的判断语句: if 语句 if...else 语句 switch 语句 if 语句 一个 if 语句 由一个布尔表达式后跟一个或多个语句组成. 语法格式如下: if(boolean_expression) { // 布尔表达式为真将执行的语句 } 如果布尔表达式 boolean_expression

  • R语言运行环境安装配置详解

    一.下载 这个是R 语言下载的镜像站点的列表 https://cran.r-project.org/mirrors.html 直接选择清华的站点来进行下载即可 https://mirrors.tuna.tsinghua.edu.cn/CRAN/ 选择版本进行下载 点击运行 进入安装界面 一路默认,安装完毕! 二.Pycharm内 好像根据环境变量,自动就配置好了,很方便 R语言下载及安装介绍到这里,你就可以用R语言写下你的第一行R语句了,打印个"Hello World!"试一下 >

  • R语言strsplit函数用法深入详解

    1.R语言strsplit用于分割字符串 创建测试数据 > test <- "aa bb cc dd ee ff" ##创建测试数据 > test [1] "aa bb cc dd ee ff" > class(test) ## 测试数据为字符 [1] "character" 2.按照指定分隔符拆分字符串 > a <- strsplit(test,split = " ") ##制动分隔符为空

  • R语言中因子相关知识点详解

    因子是用于对数据进行分类并将其存储为级别的数据对象. 它们可以存储字符串和整数. 它们在具有有限数量的唯一值的列中很有用. 像"男性","女性"和True,False等.它们在统计建模的数据分析中很有用. 使用factor()函数通过将向量作为输入创建因子. 例 # Create a vector as input. data <- c("East","West","East","North

  • R语言关于数据帧的知识点详解

    数据帧是表或二维阵列状结构,其中每一列包含一个变量的值,并且每一行包含来自每一列的一组值. 以下是数据帧的特性. 列名称应为非空. 行名称应该是唯一的. 存储在数据帧中的数据可以是数字,因子或字符类型. 每个列应包含相同数量的数据项. 创建数据帧 # Create the data frame. emp.data <- data.frame( emp_id = c (1:5), emp_name = c("Rick","Dan","Michelle&

  • R语言中的因子类型详解

    一.Factor函数 #函数factor可以把一个向量编码为一个因子,其一般形式为: #factor(x,levels=sort(unique(x),na.last=TRUE),labels,exculde=NA,order=FALSE) #其中x是向量,levels是水平,可以自行指定各离散的取值,不指定时由x的不同值来表示,labels可以用来指定各水平的标签 #不指定时用各离散取值的对应字符串 sex<-c("M","F","M",&

  • Java语言之包和继承详解

    目录 一.包 包名 类的导入与静态导入 在包中添加类 包访问权限 二.继承 类.超类与子类 重写方法(override) this与super的区别: 子类构造器 protected关键字 阻止继承:final关键字 组合 总结 一.包 包名 在讲包名前,我们先来了解一下,包是用来干什么的? Java中允许使用包(package),包将类组织在一个集合中.借助包可以方便管理组织自己的代码,并将自己的代码与别人的提供的代码库分开管理. 包是组织类的一种方式.使用包的主要目的就是保证类的唯一性. 在

随机推荐