R在ggplot2的x轴上绘制年龄(以年和月为单位)
R Plot age (in years and months) on the x-axis in ggplot2
我正在尝试在 ggplot2 中创建一个图表,在 x 轴上显示年龄和月份。年龄变量应如下所示:“2;6”= 2 岁零 6 个月,“5;9”= 5 岁零 9 个月。 x 轴的原始数据由以月为单位的年龄组成,需要一个函数来创建以年和月为单位的年龄变量。我在网上看过,虽然我可以找到很多关于绘制日期的 material(例如使用 "lubridate" 包),但我不知道如何调整这些例程来绘制年龄。理想的解决方案是使用自定义函数重新标记 x 轴。下面是一个最小的工作示例。我创建了一个小数据集,一个将月份转换为年和月的函数,并且我已经开始绘制了。谁能帮我重新标记 x 轴的语法(我认为 "scale-x-discrete" 可能是正确的函数)。谢谢!
library(ggplot2)
# Create data frame
df <- cbind.data.frame(c(22.2, 24.3, 26.1, 39.8, 55.0), c(0.5, 0.6, 0.8, 1, 1.5))
names(df) <- c("age_months", "height")
# Create function for turning age-in-months into age-in-years+months
m2ym <- function(age_m){
year <- floor(age_m/12)
month <- floor(age_m - (year*12))
return(paste0(year, ";", month))
}
#Now plot
g <- ggplot(df, aes(age_months, height))
g <- g + geom_point()
# Now add g <- g + scale_x_discrete()???
您可以在末尾添加此内容以获取这些自定义标签:
my_breaks = 6*0:10 # every six months, from 0 to 60 months
my_breaks_labels = m2ym(my_breaks) # save those numbers as "yr + mo" format
g + scale_x_continuous(breaks = my_breaks, # use these breaks...
labels = my_breaks_labels) # ...with these labels
我不确定我是否完全理解这个问题并且无法发表评论,但根据我的理解,如果您想使用函数结果绘制 x 轴,为什么不使用您的函数改变一个新列,即
library(dplyr)
df <- df %>% mutate(age_y_m = m2ym(age_months))
然后绘制新列并重新标记 x 轴
g <- ggplot(df, aes(x = age_y_m, y = height)) +
geom_point() +
xlab("Age in Years and Months (y;m)")
我正在尝试在 ggplot2 中创建一个图表,在 x 轴上显示年龄和月份。年龄变量应如下所示:“2;6”= 2 岁零 6 个月,“5;9”= 5 岁零 9 个月。 x 轴的原始数据由以月为单位的年龄组成,需要一个函数来创建以年和月为单位的年龄变量。我在网上看过,虽然我可以找到很多关于绘制日期的 material(例如使用 "lubridate" 包),但我不知道如何调整这些例程来绘制年龄。理想的解决方案是使用自定义函数重新标记 x 轴。下面是一个最小的工作示例。我创建了一个小数据集,一个将月份转换为年和月的函数,并且我已经开始绘制了。谁能帮我重新标记 x 轴的语法(我认为 "scale-x-discrete" 可能是正确的函数)。谢谢!
library(ggplot2)
# Create data frame
df <- cbind.data.frame(c(22.2, 24.3, 26.1, 39.8, 55.0), c(0.5, 0.6, 0.8, 1, 1.5))
names(df) <- c("age_months", "height")
# Create function for turning age-in-months into age-in-years+months
m2ym <- function(age_m){
year <- floor(age_m/12)
month <- floor(age_m - (year*12))
return(paste0(year, ";", month))
}
#Now plot
g <- ggplot(df, aes(age_months, height))
g <- g + geom_point()
# Now add g <- g + scale_x_discrete()???
您可以在末尾添加此内容以获取这些自定义标签:
my_breaks = 6*0:10 # every six months, from 0 to 60 months
my_breaks_labels = m2ym(my_breaks) # save those numbers as "yr + mo" format
g + scale_x_continuous(breaks = my_breaks, # use these breaks...
labels = my_breaks_labels) # ...with these labels
我不确定我是否完全理解这个问题并且无法发表评论,但根据我的理解,如果您想使用函数结果绘制 x 轴,为什么不使用您的函数改变一个新列,即
library(dplyr)
df <- df %>% mutate(age_y_m = m2ym(age_months))
然后绘制新列并重新标记 x 轴
g <- ggplot(df, aes(x = age_y_m, y = height)) +
geom_point() +
xlab("Age in Years and Months (y;m)")