R语言数据可视化教程(ggplot2)_坐标轴设置

基于 R 语言的科研论文绘图技巧详解(4) 简介 在查阅文献的过程中,看到了几幅非常不错的出版图,今天就跟着小编一起学习下,他们是怎么使用 R 绘制出来的。 今天主要介绍 第四幅图(D) —— 实现双 Y 轴,并且添加坐标轴的微小刻度线。这个图在科研绘图中较为常用,例如:将算法的收敛情况和计算所耗时间同时绘制。 前三幅图的详细代码介绍可见:基于 R 语言的科研论文绘图技巧详解(3)基于 R 语言的科研论文绘图技巧详解(2)基于 R 语言的科研论文绘图技巧详解(1) 。后面几幅图会一一介绍,读者在学习过程中,可以将内部学到的知识点应用到自己的图形绘 阅读详情

# 8.坐标轴
# 8.1交换x轴和y轴
# 使用coord_flip()来翻转坐标轴
library(ggplot2)
ggplot(PlantGrowth,aes(x=group,y=weight))+geom_boxplot()
ggplot(PlantGrowth,aes(x=group,y=weight))+geom_boxplot()+coord_flip()
# 如果x变量是一个因子型变量,则排列顺序可以通过使用scale_x_discrete()和参数limits=rev(levels(...))进行反转
ggplot(PlantGrowth,aes(x=group,y=weight))+geom_boxplot()+coord_flip()+scale_x_discrete(limits=rev(levels(PlantGrowth$group)))


# 8.2设置连续型坐标轴的值域
# 可以使用xlim()和ylim()来设置一条连续型坐标轴的最小值和最大值
p <- ggplot(PlantGrowth,aes(x=group,y=weight))+geom_boxplot()
# 显示图形
p
p +ylim(0,max(PlantGrowth$weight))
# 使用ylim()来设定范围是通过scale_y_continuous()来设定范围的简便写法(对于xlim()和scale_x_continuous()同理)
# 以下两种表达方式等价:
ylim(0,10)
scale_y_continuous(limits = c(0,10))
# 有时需要设定scale_y_continuous()的其他属性,在这些情况下同时使用ylim()和scale_y_continuous()可能会让程序产生一些不可预知的行为,这是因为只有命令中的后一条会生效
# 示例如下,仅有第二条命令生效
p+ylim(0,10)+scale_y_continuous(breaks = c(0,5,10)) # 将刻度线放在0,5,10的位置
p+scale_y_continuous(breaks = c(0,5,10))+ylim(0,10)
# 要让两项修改均生效,舍弃ylim()并直接在scale_y_continuous()中同时设定limits和breaks即可
p+scale_y_continuous(limits = c(0,10),breaks = c(0,5,10))


# ggplot2中有两种设置坐标轴值域的方式,第一种方式是修改标度,第二种方式是应用一个坐标变换。
# 当你修改x标度和y标度的范围时,任何在范围以外的数据都会被移除


# 通过使用坐标变换,数据则不会被修剪;从本质上说,它只是将数据放大或缩小到指定的范围
p+scale_y_continuous(limits = c(5,6.5)) # 与使用ylim()相同
p+coord_cartesian(ylim = c(5,6.5))
# 最后,通过使用expand_limits()来单向扩展值域也是可以的,但是不能使用它来缩减值域
p+expand_limits(y=0)


# 8.3 反转一条连续型坐标轴
# 使用scale_y_reverse或scale_x_reverse(),坐标轴的方向也可以通过指定反序的范围来反转,先写最大值,再写最小值
ggplot(PlantGrowth,aes(x=group,y=weight))+geom_boxplot()+scale_y_reverse()
#通过指定反序的范围产生类似的效果
ggplot(PlantGrowth,aes(x=group,y=weight))+geom_boxplot()+ylim(6.5,3.5)


# 与scale_y_continuous()类似,scale_y_reverse()也无法与ylim配合工作
# 如果希望反转某条坐标轴并为它设定值域,则必须通过反序设定范围的方式,在scale_y_reverse()语句内完成
ggplot(PlantGrowth,aes(x=group,y=weight))+geom_boxplot()+scale_y_reverse(limits=c(8,0))


# 8.4修改类别型坐标轴上项目的顺序
# 对于类别型(或者说离散型)坐标轴来说,会有一个因子型变量映射到它上面,坐标轴上项目的顺序可以通过设定scale_x_discrete()或scale_y_discrete()中的参数limits来修改
# 要手动设定坐标轴上项目的顺序,将一个依理想顺序排列的水平向量指定给limits即可。也可以使用这个向量来忽略某些项目
p <- ggplot(PlantGrowth,aes(x=group,y=weight))+geom_boxplot()
p+scale_x_discrete(limits=c("trt1","ctrl","trt2"))


# 也可以使用以上方法展示项目的子集:
p+scale_x_discrete(limits=c("ctrl","trt1"))
# 要反转项目顺序,设定limits=rev(levels(...)),将因子型变量放在括号中即可。
p + scale_x_discrete(limits=rev(levels(PlantGrowth$group)))


# 8.5设置x轴和y轴的缩放比例
# 使用coord_fixed()
# 以下代码将得到x轴和y轴之间1:1的缩放效果
library(gcookbook)
sp <- ggplot(marathon,aes(x=Half,y=Full))+geom_point()
sp + coord_fixed()


# 通过在scale_y_continuous()和scale_x_continuous()中调整参数breaks,从而将刻度间距设为相同
sp + coord_fixed()+ scale_y_continuous(breaks = seq(0,420,30))+scale_x_continuous(breaks = seq(0,420,30))


# 如果希望为两个坐标轴之间指定其他的固定比例而非相同的比例,可以设置参数ratio。
sp + coord_fixed(ratio = 1/2) + scale_y_continuous(breaks = seq(0,420,30))+scale_x_continuous(breaks = seq(0,420,15))


# 8.6 设置刻度线的位置
# 通常来说ggplot()会自动将刻度线摆放在合适的位置,但如果希望改变他们的位置,设置标度中的参数breaks即可
ggplot(PlantGrowth,aes(x=group,y=weight))+geom_boxplot()
ggplot(PlantGrowth,aes(x=group,y=weight))+geom_boxplot()+scale_y_continuous(breaks = c(4,4.25,4.5,5,6,8))


# 刻度线的位置决定了绘制主网格线的位置。如果该坐标轴表示一个连续型变量,那么颜色更暗且没有标签的次网格线将被默认绘制在每两个主网格线的正中间位置。
# 使用seq()函数或运算符:来生成刻度线的位置向量
seq(4,7,by=.5)
5:10
# 如果坐标轴是离散的而不是连续型的,则默认会为每个项目生成一条刻度线。
# 对于离散型坐标轴,可以通过指定limits来修改项目的顺序或移除项目。
# 设定breaks将会决定为哪些水平加上标签,但不会移除它们或是改变他们的顺序
# 为离散型坐标轴同时设定breaks和limits
ggplot(PlantGrowth,aes(x=group,y=weight))+geom_boxplot()+scale_x_discrete(limits=c("trt2","ctrl"),breaks="ctrl")


# 8.7 移除刻度线和标签
# 使用theme(axis.text.y=element_blank()),也可对axis.text.x做相同处理,对于连续型和离散型坐标轴均有效
p <- ggplot(PlantGrowth,aes(x=group,y=weight))+geom_boxplot()
p + theme(axis.text.y = element_blank())


# 要移除刻度线,可使用theme(axis.ticks=element_blank()).这样将会同时移除两轴的刻度线
 p + theme(axis.ticks = element_blank(),axis.text.y = element_blank())
 
# 要移除刻度线、刻度标签和网格线,将breaks设置为NULL即可
p +scale_y_continuous(breaks = NULL) 
# 这种方法仅对连续型坐标轴有效
# 事实上,共有三种项目可以控制:刻度标签,刻度线和网格线,对于连续型坐标轴,ggplot()通常会在每个breaks值得位置放置刻度线、刻度标签和主网格线。
# 对于类别型坐标轴,这些元素则出现在每个limits值的位置。
# 我们可以独立控制每条坐标轴上的刻度标签。但是,刻度线和网格线必须同时控制。
# 8.8 修改刻度标签的文本
library(gcookbook)
hwp <- ggplot(heightweight,aes(x=ageYear,y=heightIn))+geom_point()
hwp
# 任意设定标签,在标度中为breaks和labels赋值即可。
hwp + scale_y_continuous(breaks=c(50,56,60,66,72),labels = c("Tiny","Really\nshort","Short","Medium","Tallish"))


# 定义一个格式刷(formatter)函数,这样的函数可以读入数值并返回相应的字符串
# 以下函数将英寸数值转换为英尺加英寸的格式:
footinch_formatter <- function(x){
  foot <- floor(x/12)
  inch <- x%%12
  return(paste(foot,"'",inch,"\"",sep=""))
}
footinch_formatter(56:64)
# 使用参数labels将我们的函数传递给标度
hwp+scale_y_continuous(labels = footinch_formatter)
# 通过指定参数breaks让ggplot()每隔四英寸设置一条刻度线取而代之
hwp + scale_y_continuous(breaks = seq(48,72,4),labels = footinch_formatter)


# 将时间测度转换为HH:MM:SS(时:分:秒)或者其他类似的格式。
timeHMS_formatter <- function(x){
  h <- floor(x/60)
  m <- floor(x%%60)
  s <- round(60*(x%%1)) # 舍入到最接近的秒数
  lab <- sprintf("%02d:%02d:%02d",h,m,s) # 格式化字符串为HH:MM:SS的格式
  lab <- gsub("^00:","",lab)  # 如果开头存在00: 则移除
  lab <- gsub("^0","",lab)  # 如果开头存在0 则移除
  return(lab)
}
timeHMS_formatter(c(.33,50,51.25,59.32,60,60.1,130.23))
# 随ggplot2()安装的scales包自带了一些内建的格式化函数
# comma()在千、百万、十亿等位置向数字添加逗号
# dollar()添加一个美元符号并舍入到最接近的美分
# percent()乘以100,舍入到最接近的整数值,并添加一个百分号
# scientific()对大数字和小数字给出科学计数法表示。
# 要使用这些函数,必须首先使用library(scales)加载scales包


# 8.9 修改刻度标签的外观
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
# 将文本逆时针旋转90°
bp+theme(axis.text.x = element_text(angle = 90,hjust = 1,vjust = .5))
# 将文本旋转30°
bp+theme(axis.text.x = element_text(angle = 30,hjust = 1,vjust = 1))
# 参数hjust和vjust设置了横向对齐(左对齐、居中、右对齐)和纵向对齐(顶部对齐/居中/底部对齐)


# 除了旋转以外,其他的文本属性,如大小、样式(粗体/斜体/常规)和字体族(如Times和Helvetica)可以使用element_text()进行设置
bp +theme(axis.text.x = element_text(family = "Times",face = "italic",colour = "darkred",size = rel(0.9)))
# size(文字大小)被设为rel(0.9),意为当前主体基础字体大小的0.9倍
# 这些命令仅仅控制了单个坐标轴刻度标签的外观,并不影响其他坐标轴、坐标轴标签、整体的标题或图例
# 要控制所有这些元素的外观,可以使用主题系统


# 8.10修改坐标轴标签的文本
# 使用xlab()或ylab()来修改坐标轴标签的文本
library(gcookbook)
hwp <- ggplot(heightweight,aes(x=ageYear,y=heightIn,colour=sex))+geom_point()
# 使用默认的坐标轴标签
hwp
# 设置坐标轴标签
hwp+xlab("Age in years")+ylab("Height in inches")
# 默认情况下,图形将直接使用数据框中的列名作为坐标轴标签。
# 也可以使用labs()
hwp + labs(x="Age in years",y="Height in inches")
# 设置坐标轴标签的另一种方法是在标度中指定
hwp+scale_x_continuous(name = "Age in years")
# 这种方法同样适用于其他的坐标轴标度,如scale_y_continuous()、scale_x_discrete()等
# 还可以使用\n来添加换行
hwp +scale_x_continuous(name = "Age\n(Years)")


# 8.11移除坐标轴标签
# 对于x轴标签,使用theme(axis.title.x=element_blank())。对于y轴标签,针对axis.title.y处理
# 隐藏x轴标签
p <- ggplot(PlantGrowth,aes(x=group,y=weight))+geom_boxplot()
p + theme(axis.title.x = element_blank())
# 移除坐标轴标签的另一种方法是将其设定为一个空字符串。但如果以这种方式去做,那么图中将仍为文本留出空间
p + xlab("")
# 当使用theme()来设置axis.title.x=element_blank()时,x或y标度的名称是不会改变的,只是这样不会显示文本而且不会为其留出空间。
# 当你设置标签为“"时,标度的名称就改变了,并且实际上显示了(空白的)文本


# 8.12 修改坐标轴标签的外观
# 要修改x轴标签的外观,使用axis.title.x即可
library(gcookbook)
library(ggplot2)
hwp <- ggplot(heightweight,aes(x=ageYear,y=heightIn))+geom_point()
hwp + theme(axis.title.x = element_text(face = "italic",colour="darkred",size=14))


# 对于y轴标签来说,有时不对文本进行旋转会比较有用
# 标签中的\n表示另起一行
hwp + ylab("Height\n(inches)")+theme(axis.title.y = element_text(angle = 0,face = "italic",size = 14))
# 调用element_text()时,默认的角度是0,如果设置了axis.title.y但没有指定这个角度,它将以文本的顶部指向上方的朝向显示。
# 如果修改了axis.title.y中的其他任何属性并且希望它以正常朝向,即旋转90°显示,则必须手动指定这个角度
hwp + ylab("Height\n(inches)")+theme(axis.title.y = element_text(angle = 90,face="italic",colour = "darkred",size=14))
# 8.13沿坐标轴显示直线
# 使用主题设置中的axis.line
library(gcookbook)
p <- ggplot(heightweight,aes(x=ageYear,y=heightIn))+geom_point()
p + theme(axis.line = element_line(colour = "black"))


# 如果最初使用的主题在绘图区域的周围就有一条边,则需要同时重置参数panel.border
p + theme_bw()+theme(panel.border = element_blank(),axis.line = element_line(colour = "black"))
# 如果边界线比较粗,则它们的末端将仅会部分地重叠,要让它们完全重叠,设置lineend="square"即可
# 对于较粗的线条,只有一半重叠
p + theme_bw()+theme(panel.border = element_blank(),axis.line = element_line(colour = "black",size = 4))
# 完全重叠
p + theme_bw()+ theme(panel.border = element_blank(),axis.line = element_line(colour = "black",size = 4,lineend = "square"))


# 8.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
# 使用对数x标度和对数y标度
p + scale_x_log10()+scale_y_log10()
# 使用对数坐标轴时,视觉上某段给定的距离表示着常数倍的比例改变
# 使用线性坐标轴时,视觉上某段给定的距离表示着常数单位数量的改变


# 某些数据集在x轴上是呈指数分布的,而另一些则是在y轴上呈指数分布(或者两轴皆是)
Animals
10^(0:3)
10^(-1:3)
p + scale_x_log10(breaks=10^(-1:5))+scale_y_log10(breaks=10^(0:3))


# 要让刻度线标签转而使用指数计数法,只要使用scales包中的函数trans_format()即可
library(scales)
p + scale_x_log10(breaks=10^(-1:5),labels=trans_format("log10",math_format(10^.x)))+scale_y_log10(breaks=10^(0:3),labels=trans_format("log10",math_format(10^.x)))
# 使用对数坐标轴的另一种方法是,在将数据映射到x和y卓彪之前,先对其进行变换
# 坐标轴仍然是线性的——它表示对数变换后的数值
ggplot(Animals,aes(x=log10(body),y=log10(brain),label=rownames(Animals)))+geom_text()


library(scales)
# 对x使用自然对数变换,对y使用log2变换
p + scale_x_continuous(trans = log_trans(),breaks = trans_breaks("log",function(x) exp(x)),labels = trans_format("log",math_format(e^.x)))+scale_y_continuous(trans = log2_trans(),breaks = trans_breaks("log2",function(x) 2^x),labels = trans_format("log2",math_format(2^.x)))


# 默认的刻度线间距可能不够好,可以在标度中使用参数breaks来设置它们
library(gcookbook)
ggplot(aapl,aes(x=date,y=adj_price))+geom_line()
ggplot(aapl,aes(x=date,y=adj_price))+geom_line()+scale_y_log10(breaks=c(2,10,50,250))
# 8.15 为对数坐标轴添加刻度
# 使用annotation_logticks()
library(MASS)
library(scales)
library(ggplot2)
ggplot(Animals,aes(x=body,y=brain,label=rownames(Animals)))+geom_text(size=3)+annotation_logticks()+scale_x_log10(breaks = trans_breaks("log10",function(x) 10^x),labels=trans_format("log10",math_format(10^.x)))+scale_y_log10(breaks=trans_breaks("log10",function(x) 10^x),labels=trans_format("log10",math_format(10^.x)))
# 使用annotation_logticks()创建的刻度线事实上是绘图区域中的几何对象
# 使用theme_bw()让刻度线和网格线的颜色更协调一些
# 默认情况下,次网格线在视觉上出现在两条主网格线的正中间,但这与对数标度下表示“5”的刻度线位置并不相同。
# 要让两者位置相同,可以手动设置标度的minor_breaks参数
ggplot(Animals,aes(x=body,y=brain,label=rownames(Animals)))+geom_text(size=3)+annotation_logticks()+scale_x_log10(breaks = trans_breaks("log10",function(x) 10^x),labels=trans_format("log10",math_format(10^.x)),minor_breaks=log10(5)+ -2:5)+scale_y_log10(breaks=trans_breaks("log10",function(x) 10^x),labels=trans_format("log10",math_format(10^.x)),minor_breaks=log10(5)+ -1:3)+coord_fixed()+theme_bw()
# 所谓5的位置,是指前一个长刻度线对应数值5倍的位置
# 8.16 绘制环状图形
# 使用coord_polar()
library(gcookbook)
wind
ggplot(wind,aes(x=DirCat,fill=SpeedCat))+geom_histogram(binwidth = 15,origin=-7.5)+coord_polar()+scale_x_continuous(limits = c(0,360))
# 使用极坐标图时要小心,因为这种图形会扭曲对数据的感知
# 通过反转图例、使用不同的调色板、添加外框线以及将分割点设置为某些更熟悉的值得方式,让图形稍微美观一些
ggplot(wind,aes(x=DirCat,fill=SpeedCat))+geom_histogram(binwidth = 15,origin=-7.5,colour="black",size=.25)+guides(fill=guide_legend(reverse = TRUE))+coord_polar()+scale_x_continuous(limits = c(0,360),breaks = seq(0,360,by=45),minor_breaks = seq(0,360,by=15))+scale_fill_brewer()
# 使用参数start设置图形起始的角度可能也是有用的,特别是当我们使用一个离散型变量映射为角度(theta)时。
# 起始角度的值以弧度计,如果知道要调整的角度,则必须将它转换为弧度:
coord_polar(start = -45*pi/180)
# 默认情况下,对于映射到y(或者说r)的变量,最小值将被映射到中心;换句话说,数据中的最小值将被映射到视觉上半径为0的位置。
# 如果希望一个为0的数据值被映射到半径为0的位置,为了确保图形能这样绘制,需要设置对应的界限(limit)
# 在使用一个连续型的x(或者说theta)时,数据中的最小值和最大值是重合的。有时这样是可取的,有时却不是。要修改这种默认行为,需要设置对应的界限
# 极坐标的theta值不能环绕一周
# 将mdeaths的时间序列数据放入一个数据框
md <- data.frame(deaths = as.numeric(mdeaths),month = as.numeric(cycle(mdeaths)))
# 计算每个月的平均死亡数量
library(plyr)
md <- ddply(md,"month",summarise,deaths=mean(deaths))
md
# 绘制基本图形
p <- ggplot(md,aes(x=month,y=deaths))+geom_line()+scale_x_continuous(breaks = 1:12)
# 使用coord_polar
p + coord_polar()
# 通过设置y(或者说r)的界限为从0到数据中的最大值来解决这个问题
# 使用coord_polar并将y(r)的下届设置为0
p+coord_polar()+ylim(0,max(md$deaths))
# 设置x的界限为0~12
p + coord_polar()+ylim(0,max(md$deaths))+xlim(0,12)
# 首尾不相接的问题。需要修改数据框,添加一个月份为0,对应值与12月相同的行
# 通过添加一个值与12的值相同的0来连接曲线
mdx <- md[md$month==12,]
mdx$month <- 0
mdnew <- rbind(mdx,md)


# 通过使用%+%,绘制与之前相同的图形,只是使用的数据不同
p %+%mdnew+coord_polar()+ylim(0,max(md$deaths))
# 注意运算符%+%的使用,当你使用%+%向一个ggplot对象添加一个数据框时,它会替换ggplot对象中的默认数据框
# 8.17 在坐标轴上使用日期
# 将一列类为Date的变量映射为x轴或y轴即可。
# 观察数据结构
str(economics)
ggplot(economics,aes(x=date,y=psavert))+geom_line()
# ggplot2可以处理两类时间相关的对象,日期对象(类为Date的对象)和日期时间对象(类为POSIXt的对象)。
# 两类对象的区别是,Date对象表示的是日期,分辨率为一天,而POSIXt对象则表示时刻,拥有精确到秒的小数部分的分辨率
# 设置分割点与数值坐标轴的方式类似——主要的不同在于设置所要使用的日期序列
# 如果未设置分割点,则将自动选择
# 取economics的一个子集
econ <- subset(economics,date >= as.Date("1992-05-01") & date < as.Date("1993-06-01"))
# 基本图形——不指定分割点
p <- ggplot(econ,aes(x=date,y=psavert))+geom_line()
p
# 分割点可使用函数seq()来创建,给定起始和终止日期和一个步长区间
# 指定一个日期向量为分割点
datebreaks <- seq(as.Date("1992-06-01"),as.Date("1993-06-01"),by="2 month")
# 使用分割点并旋转文本标签
p + scale_x_date(breaks = datebreaks)+theme(axis.text.x = element_text(angle = 10,hjust = 1))
# 可以通过使用scales包中的date_format()函数来指定分割点(标签)的格式
library(scales)
p + scale_x_date(breaks = datebreaks,labels=date_format("%Y %b"))+theme(axis.text.x = element_text(angle = 30,hjust = 1))
# %Y:含世纪的年份(2012)
# %y:不含世纪的年份(12)
# %m:十进制数表示月份(08)
# %b:当前区域设置(locale)的月份名缩写(Aug)
# %B:当前区域设置的月份名全称(August)
# %d:十进制数表示的月份中的日期(04)
# %U:十进制数表示的一年中的第几周,星期日作为每周的第一天(00-53)
# %W:十进制数表示的一年中的第几周,星期一作为每周的第一天(00-53)
# %w:星期几(0-6,星期日为0)
# %a:星期几的缩写名(Thu)
# %A:星期几的全称(Thursday)
# 以上选型中的一部分依赖于计算机的区域设置(locale)。月份和日期在不同的语言中会有不同的名称
# 可以使用Sys.setlocale()来修改区域设置
# Windows
# Sys.setlocale("LC_TIME","italian")
# 8.18在坐标轴上使用相对时间
# 时间值通常以数字的形式存储。时间也能从某个起始时间经过的分钟数或秒数来存储。这些情况下,可以将一个值映射到x轴或y轴上,并使用一个格式刷来生成合适的坐标轴标签
# 转换时间序列对象WWWusage为数据框
www <- data.frame(minute = as.numeric(time(WWWusage)),users=as.numeric(WWWusage))
# 定义一个格式刷函数——可将以分钟表示的时间转换为字符串
timeHM_formatter <- function(X){
  h <- floor(x/60)
  m <- floor(x %% 60)
  lab <- sprintf("%d:%02d",h,m) #将字符串格式化为HH:MM(时:分)的格式
  return(lab)
}
# 默认的x轴
ggplot(www,aes(x=minute,y=users))+geom_line()
# 使用格式化后的时间
ggplot(www,aes(x=minute,y=users))+geom_line()+scale_x_continuous(name="time",breaks = seq(0,100,by=10),labels = timeHM_formatter())
# 手动设置分割点和标签
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"))
# 使用函数timeHM_formatter()来讲数值时间(以分钟表示)转换为一个类似于“1:10”的字符串
timeHM_formatter(c(0,50,51,59,60,130,604))
timeHMS_formatter(c(20,3000,3075,3559.2,3600,3606,7813.8))

ggplot2-设置坐标轴 本文在 http://www.cookbook-r.com/Graphs/Axes_(ggplot2)/ 的基础上加入了自己的理解基本箱线图library(ggplot2) bp ggplot(PlantGrowth, aes(x=group, y=weight)) + 阅读详情

相关推荐

R语言ggplot2直方图设置

1.基本代码 用ggplot2画直方图最基本的代码为: ggplot(data=travel)+geom_histogram(aes(x=sale)) 这里面travel是data frame,sale是我要画直方图的数据。 这个时候会出现warning: 这说明他默认了直方图中“柱”的个数,但是其实我是可以自己设置的。既可以通过bin的个数设置,也可以通过bin的宽度设置: ggplot(d...

weixin_45387324的博客 7994

ggplot2——坐标系篇

目录: 初始图样 如何修改坐标轴的显示范围 如何修改坐标轴的标签(内容、大小、字体、颜色、加粗、位置、角度) 如何修改坐标轴的刻度标签(内容) 如何修改坐标轴的刻度标签(大小、字体、颜色、加粗、位置、角度) 如何修改坐标轴的刻度间隔 如何去掉网格线 如何去掉刻度标签 如何去掉刻度线 如何去掉外层边框 如何再加上X轴、Y轴(无刻度、无标签) (更多内容请见:R、ggplot2、s

九茶 19万+

使用R语言中的`scale_y_continuous`函数的`labels`参数可以自定义设置X轴坐标标签的格式

参数,我们可以轻松自定义Y轴坐标标签的格式。可以根据具体需求,使用各种函数和方法来实现不同的标签格式,以便更好地展示数据。这个函数将Y轴的刻度值除以1000,并在后面添加"k"作为千位分隔符。这样,Y轴坐标标签显示的值就会以"k"为单位。在R语言中,绘制图形时经常需要自定义坐标轴的标签格式,以便更好地展示数据。参数允许我们传入一个函数或向量,用于指定我们想要显示的标签格式。包中的一个函数,用于设置Y轴坐标轴的连续型刻度。函数来自定义Y轴坐标标签的格式。函数来自定义Y轴坐标标签的格式。接下来,我们可以使用。

DevGOOD的博客 905

R语言的ggplot2如何设置x轴和y轴的范围和刻度

seq(最小值,最大值,间距);这样做的好处就是对于有规律的刻度,不用自己写那么多数。今天突然发现用R语言的ggplot2给x轴和y轴设置刻度,建议用seq()函数。#x轴刻度 seq(30,90,5)函数, 分别是最小值30,最大值90,间距5。#y轴刻度,seq(0,2,0.2)函数,分别是最小值0,最大值2,间距0.2。可以观察图1和下面两幅图的区别,看看刻度如何变化的。比如我想设置范围30~90,刻度是5。#下面代码设置x轴刻度和标签。#下面代码设置y轴刻度和标签。

kaiming000的博客 2万+

使用R语言中的`scale_y_continuous`函数的`breaks`参数来指定Y轴的刻度数量

参数,我们可以方便地控制Y轴上刻度的位置和数量,从而实现更加个性化的绘图效果。你可以根据自己的需求,灵活调整刻度位置,使得数据的展示更加直观和易于理解。在R语言中,我们经常需要对绘图进行自定义,包括调整坐标轴的刻度标签和刻度线的位置。函数是ggplot2包中用于调整Y轴刻度的函数之一。包,并创建了一个包含x和y变量的示例数据集。这样,Y轴上的刻度就会按照我们指定的位置显示出来。最后,我们将调整后的刻度应用到绘图对象中,通过使用。参数,我们可以控制Y轴上的刻度数量。函数来调整Y轴的刻度,通过。

2301_79326857的博客 1270

R语言ggplot2绘图详细指南

R语言ggplot2绘图详细指南ggplot2是R语言中最受欢迎和强大的绘图包之一。它提供了一种优雅而灵活的方式来创建高质量的数据可视化图表。本教程将介绍ggplot2的基本用法,包括数据准备、图层构建和样式设置。

PixelShadeZ的博客 629

ggplot2

1R使用教程中的ggplot2作图方法 30 ggplot的各种图形 | R语言教程 (pku.edu.cn) 2ggplot2作图 R语言学习笔记——ggplot2作图 - 简书 (jianshu.com) 3ggplot2作图最全教程(上) - 知乎 (zhihu.com)

Orangezzlzj的博客 229

玩转数据可视化之R语言ggplot2:(七)对图形添加注释和标签(包含标题、坐标轴、参考线和高亮等注释方法)

- 🌸个人主页:[JoJo的数据分析历险记](https://blog.youkuaiyun.com/weixin_45052363?type=blog) - 📝个人介绍:小编大四统计在读,目前保研到**统计学top3**高校继续攻读统计研究生 - 💌如果文章对你有帮助,欢迎**关注、点赞、收藏、订阅专栏 本系列主要介绍R语言ggplot2的使用 本章介绍一些图形注释方面的方法,欢迎大家阅读关注收藏

阿里云专家博主、数据科学领域优质创作者、统计er在读 4万+

ggplot2设置坐标轴范围_R语言画展ggplot2篇:如何改变坐标轴的范围?

????点击蓝字就可以关注"善思耳"哦~~:坐标轴太长或者太短不好看?今天使用ggplot2改变坐标轴的范围。初步做完图片之后,往往需要修饰坐标轴的范围。首先使用“iris”做一个散点图。例1. 散点图# 载入ggplot2library(ggplot2)#散点图ggplot(iris, aes(Sepal.Length, Sepal.Width)) + geom_point()【...

weixin_39525933的博客 2万+

玩转数据可视化之R语言ggplot2:(十)坐标轴和刻度线设置1

位置标度是用来控制视觉实体在图中的位置,以及这些位置如何映射到数据值。每个图都有两个位置标度,分别对应于X和Y美学。在大多数情况下,这在绘图规范中是明确的,因为我们会明确地指定映射到x和y的变量。然而,情况并非总是如此。

阿里云专家博主、数据科学领域优质创作者、统计er在读 2万+

玩转数据可视化之R语言ggplot2:(十一)坐标轴和刻度线设置2

上一篇文章我们介绍了数值型变量的位置和刻度的设置,这一篇文章我们来讨论一下日期型数据和离散型数据的位置和刻度设置

阿里云专家博主、数据科学领域优质创作者、统计er在读 2万+

[R语言] ggplot2入门笔记1—ggplot2简要教程

文章目录1 ggplot2入门笔记1—ggplot2简要教程1. 设置 The Setup2. 图层 The Layers3. 标签 The Labels4. 主题 The Theme5. 分面 The Facets6. 常用函数 Commonly Used Features6.1 绘制时间序列图(使用ggfortify)6.2 在同一ggplot上绘制多个时间序列6.3 条形图6.4 自定义布局...

You and Me 5806

用5毫欧采样电阻实现高精度电流检测?数字可调电源控制板的硬件设计陷阱

本文深入探讨了在数字可调电源控制板设计中,如何利用5毫欧采样电阻实现高精度电流检测。从微小信号放大电路设计、采样电阻布局与热管理,到电源切换与电池管理电路优化,提供了全面的硬件设计解决方案和实用技巧,帮助工程师规避常见设计陷阱,提升系统性能。

wdx0123456的博客 1029

ggplot2中显示坐标轴_一文读懂ggplot2数据可视化

1前言ggplot2是数据可视化的重要程序包,用于绘制各种高级统计图形。该程序包是新西兰统计学家Hadley Wickham在2005年左右开发的,那时候作者还是美国Iowa大学的博士生。1.1ggplot2的命令是一种用R实现的绘图语言ggplot2的代码相对容易理解,设定各种参数较为方便,图形也十分美观,能用相对简单的代码在图形中呈现出非常丰富的信息。不过,ggplot2的语法与...

weixin_28687251的博客 9511

从MySQL到数据仓库:手把手教你用Airflow实现自动化ETL流水线

本文详细介绍了如何利用Airflow构建从MySQL到数据仓库的自动化ETL流水线,涵盖增量抽取策略、PySpark转换优化和数据质量监控等实战细节。特别适合中小规模企业构建高效数据仓库,提升数据处理效率和质量。

rnn9storyteller的博客 827

【网络协议】【TSN】精讲TSN工作原理!图解超赞超详细!!!

TSN有一个服务等级(class of service,CoS)的概念。对TSN网络而言,不同优先级的服务对应图3中的PCP码。3位PCP码定义了0(最低)~7(最高)这8个优先级,传输类型分别对应基础、最大努力、卓越努力、严苛应用、延时和抖动小于100 ms的视频、延时和抖动小于10 ms的音频、内部网络控制、网络控制。其会对网络场景进行不同的匹配,是后续调度、配置设计中会考虑到的数据流调度因素。

风云说通信 2632

ggplot2设置坐标轴范围_Python语言plotnine VS R语言ggplot2

ggplot2包是由Hadley Wickham在2005年创造。相对于R中的基础可视化包,是基于图形语法的绘图包,一经提出就迅速受到广大R语言使用者的喜爱。ggplot2包利用图层叠加的绘图方式,往图像上不断的添加图形元素、注释、统计结果等内容。plotnine库可以看作是在Python中对ggplot2包的一种实现,方便Python对数据可视化的应用。本文章会分别介绍在R和Python中,如何...

weixin_39859055的博客 808

深入解析基于Fluent的蒸发冷凝相变UDF程序及其在重力热管液体蒸发冷凝变化计算中的应用

ANSYS Fluent是一款功能强大的CFD软件,广泛应用于流体流动、传热、化学反应和多相流等领域的数值模拟。Fluent提供了丰富的物理模型和求解器,支持用户自定义函数(UDF)以扩展其功能,实现更为复杂和特定的模拟需求。UDF是用C语言编写的程序,允许用户在Fluent中自定义物理模型、边界条件、源项等,以实现特定的模拟需求。在处理复杂的相变过程、非均匀物性参数或特定的热传导机制时,UDF提供了极大的灵活性和扩展性。

qq_38334677的博客 1265

R语言ggplot2修改坐标轴刻度

R语言修改坐标轴刻度。

Lianj.Qin 4万+

Sentaurus TCAD建模:宽温区n型FinFET模型校准与低温仿真分析

本文基于Sentaurus TCAD平台,建立了n型FinFET的宽温区(233K-393K)仿真模型,解决了低温(73K-193K)仿真失效问题。研究对比了Sprocess工艺仿真与SDE几何建模两种方法,分析了载流子冻析效应、不完全电离和迁移率退化等低温物理机制。通过优化模型参数,实现了在233K、313K和393K条件下仿真误差小于10%,并建立了符合物理趋势的低温外推模型。研究提供了完整的Sentaurus TCAD代码实现,包括器件结构定义、物理模型配置和温度相关参数校准,为宽温区FinFET仿真

huanghm88的专栏 264

DataEase 未授权+远程代码执行漏洞复现(CVE-2025-49001、CVE-2025-49002)

DataEase 是一款开源的数据分析平台,提供丰富的数据可视化和分析功能,帮助用户轻松地进行数据探索和决策支持。近日,有关DataEase 被爆出多个漏洞,其中 CVE-2025-49001 是由于JWT校验机制错误导致攻击者可伪造JWT令牌绕过身份验证流程,CVE-2025-49002 是由于H2数据库模块没有严格过滤用户输入的JDBC连接参数,可使用大小写绕过补丁。攻击者可利用这些漏洞实现未授权代码执行,威胁用户数据和系统的安全。

李同學AI安全 1947

如何快速掌握ggplot2:R数据可视化终极教程

ggplot2是R语言中最强大的数据可视化工具之一,它基于图层语法构建,让你能够轻松创建专业级图表。无论你是数据分析新手还是有经验的R用户,掌握ggplot2都能显著提升你的数据 storytelling能力。本教程将带你从基础到进阶,快速掌握ggplot2的核心功能和实用技巧。 ## 为什么选择ggplot2? ggplot2由Hadley Wickham开发,是tidyverse生态系统的

gitblog_00845的博客 937

AUTOSAR从入门到精通-汽车电子电气架构(EEA)(二)

需求的传递并非完全是瀑布式的单向传递,而是双向的,只有被下游接受了的需求才是有效的需求,而且,下游是可以反向对上游提出需求的。当街区的设计完成之后,接下来要做的就是每栋建筑的详细设计,建筑的设计者发布的图纸中规定了房屋的主要结构、所在位置与周边环境的相互关系,以及屋中各种组件的位置与相互之间结合的关系,比如砖混结构、房屋的具体位置和朝向、卧室与客厅的相对位置与尺寸、马桶在卫生间中的位置等,还会对各种建筑材料的选取原则给出具体的标准,比如水泥的标号,钢筋的型号,各种电线的等级要求等等。

getusushu的博客 372

ggplot2设置坐标轴范围_R语言ggplot2频率分布直方图小例子

第一步:准备数据将准备用直方图展示的数据整理在excel中,每个变量一列,比如本文用到的例子 将其另存为csv格式。 以上数据来源 https://www.r-graph-gallery.com/220-basic-ggplot2-histogram.html第二步:ggplot2作图读入数据exampledfpath<-file.choose() ###运行这一行命令,跳出对话框,选择刚...

weixin_39833454的博客 2035

制作你自己的yolov5数据集并进行训练

项目地址:make-your-yolov5_dataset 一、数据集标注软件 labelImg labelMe 精灵标注助手 更多的标注工具你可以去看:深度学习图像标注工具汇总 、 十个最常用深度学习图像/视频数据标注工具 、 百度一下 在这里我选择使用labelImg 二、数据集标注 下载labelImg 解压,直接打开labelimg.exe labelImg标注数据 标注完成后即可获得VOC格式(生成.xml文件)的数据 目录结构: dataset │ ├─Annotations .

年少的勇气已经用完,剩下的就是三思而后行 1万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

上一篇: R语言数据可视化教程(ggplot2)_描述常见的数据分布及注释操作
下一篇: R语言数据可视化教程(ggplot2)_控制图形的整体外观及增加图例
镰刀韭菜
博客等级 码龄12年 2万+粉丝 853原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

镰刀韭菜

看在我不断努力的份上,支持我吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值