R在ggplot2的x轴上绘制年龄(以年和月为单位)

R在ggplot2的x轴上绘制年龄(以年和月为单位),r,ggplot2,axes,R,Ggplot2,Axes,我试图在ggplot2中创建一个x轴上以年和月为单位的图形。年龄变量应如下所示:“2;6”=2岁6个月,“5;9”=5岁9个月。x轴的原始数据包括以月为单位的年龄,需要一个函数来创建以年和月为单位的年龄变量。我在网上查过,虽然我可以找到大量关于绘图日期的资料(例如使用“lubridate”软件包),但我无法确定如何使这些例程适应绘图年龄。理想的解决方案是使用自定义函数重新标记x轴。下面是一个简单的示例。我已经创建了一个小的数据集,一个将月份转换为年和月的函数,我已经开始绘图。有人能帮我重新标记x

我试图在ggplot2中创建一个x轴上以年和月为单位的图形。年龄变量应如下所示:“2;6”=2岁6个月,“5;9”=5岁9个月。x轴的原始数据包括以月为单位的年龄,需要一个函数来创建以年和月为单位的年龄变量。我在网上查过,虽然我可以找到大量关于绘图日期的资料(例如使用“lubridate”软件包),但我无法确定如何使这些例程适应绘图年龄。理想的解决方案是使用自定义函数重新标记x轴。下面是一个简单的示例。我已经创建了一个小的数据集,一个将月份转换为年和月的函数,我已经开始绘图。有人能帮我重新标记x-axs的语法吗(我认为“scale-x-discrete”可能是正确的函数)。谢谢

库(ggplot2)
#创建数据帧

df您可以在末尾添加此项以获得这些自定义标签:

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

您可以在末尾添加以下内容以获得这些自定义标签:

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))
库(dplyr)
df%突变(年龄y月=m2ym(年龄月))
然后绘制新柱并重新标记x轴

g <- ggplot(df, aes(x = age_y_m, y = height)) +
         geom_point() + 
         xlab("Age in Years and Months (y;m)")

g我不确定我是否完全理解了这个问题,也无法发表评论,但根据我的理解,如果您想使用函数结果绘制x轴,为什么不使用您的函数变异一个新列,即

library(dplyr)
df <- df %>% mutate(age_y_m = m2ym(age_months))
库(dplyr)
df%突变(年龄y月=m2ym(年龄月))
然后绘制新柱并重新标记x轴

g <- ggplot(df, aes(x = age_y_m, y = height)) +
         geom_point() + 
         xlab("Age in Years and Months (y;m)")

g可能的重复:(重点不是回答地址是“日期”,重点是你需要使用
标签=
并创建你的
5;9
,不管你想如何处理你的数据。)可能的重复:(重点不是回答地址是“日期”,重点是您需要使用
标签=
并创建您的
5;9
,无论您希望如何处理数据。)
df$age\u y\m谢谢。这样标签就正确了,但是两次休息之间的时间间隔是不均匀的。
df$age\u y\m谢谢。这样标签就对了,但是间隔时间是不均匀的。太好了。这就是我要找的。很简单。谢谢,太好了。这就是我要找的。很简单。谢谢