ggplot中修改坐标的顺序

用R绘图的时候总遇到坐标轴排列顺序与自己预期的不同,并且其排列顺序总是按照字母的排列顺序进行的,这种情况下如何设置坐标轴的顺序?
首先要明白在用ggplot绘图时坐标一般分为两种数据类型,第一种用的是numeric,对应连续的坐标,用scale_x_continuous设置;另一种的character,对应离散的坐标,用scale_x_discrete设置。

rm(list = ls())
options(stringsAsFactors = F)

a=data.frame(s1=1:10,s2=1:10)
library(ggplot2)
ggplot()+geom_point(data=a,aes(x=s1,y=s2,size=s2))

如图所示我们用数字类型的数据绘图,绘制的图片中x轴为连续排列的,且labels也是默认等距离的。
在这里插入图片描述
这个时候可以通过scale_x_continuous改变坐标轴具体的label。常见的修改参数如下:
scale_x_continuous(expand = c(0,0), breaks = ,labels =,limits=,position=)
#expand表示x坐标轴留余,expand = c(0,0)表示去除坐标轴留余
#breaks表示坐标轴具体刻度
#labels表示坐标轴具体刻度对应的labels
#limits在连续坐标轴中表示坐标轴的范围
#position表示坐标轴的位置,如x轴为top和bottom,y轴left和right

rm(list = ls())
options(stringsAsFactors = F)

a=data.frame(s1=1:10,s2=1:10)
library(ggplot2)
ggplot()+geom_point(data=a,aes(x=s1,y=s2,size=s2))+
  scale_x_continuous(breaks=1:10,labels=1:10)

通过breaks设置具体刻度,结果如下
在这里插入图片描述
可以通过scale_x_reverse()改变坐标轴排列方向

ggplot()+geom_point(data=a,aes(x=s1,y=s2,size=s2))+
  #scale_x_continuous(breaks=1:10,labels = 1:10)+
  scale_x_reverse()

在这里插入图片描述
但就是改变不了坐标轴顺序,比如1,2,3,5,4排列,这是不行的,因为x轴是连续的数值型数据,无法改变数值的排列先后。
这时候就需要离散型坐标,离散型坐标一般为字符形式,可以用as.character()把数值型转换为字符型。

rm(list = ls())
options(stringsAsFactors = F)
a=data.frame(s1=1:10,s2=1:10)
library(ggplot2)
a$s1=as.character(a$s1) #数值型转换为字符型
ggplot()+geom_point(data=a,aes(x=s1,y=s2,size=s2))

这个时候的x轴就是离散型坐标轴,可以看到10因为第一位是1所以排在第二位,明显是字符的排列顺序。
在这里插入图片描述
我们可以通过scale_x_discrete中的limits对离散型坐标轴随意设置坐标轴先后。

rm(list = ls())
options(stringsAsFactors = F)

a=data.frame(s1=1:10,s2=1:10)
library(ggplot2)
a$s1=as.character(a$s1)
ggplot()+geom_point(data=a,aes(x=s1,y=s2,size=s2))+
  scale_x_discrete(limits=as.character(c(1,4,3,10,5,2,7,9,8,6)))

可以看到确实实现了
在这里插入图片描述
还是一种方法是通过转换为factor设置level来实现,相当于提前排序。

rm(list = ls())
options(stringsAsFactors = F)

a=data.frame(s1=1:10,s2=1:10)
library(ggplot2)
a$s1=as.character(a$s1)
a$s1=factor(a$s1,levels =c(1,4,3,10,5,2,7,9,8,6) )  #factor设置level来设置先后顺序
ggplot()+geom_point(data=a,aes(x=s1,y=s2,size=s2))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值