R 在ggplot2中手动缩放离散x轴变量

R 在ggplot2中手动缩放离散x轴变量,r,ggplot2,axis-labels,R,Ggplot2,Axis Labels,我有一个ggplot2图,其中x轴变量是一个因子,但表示月份和年份的不同时间跨度(1m、3m、6m、1y、2y、3y、5y、7y、10y、20y和30y——这是一个)。因子变量为我提供了很好的标签,但间距也很小。我希望x轴间距与时间跨度成比例 我认为这种调整应该通过scale\u x\u discrete(),但我只看到一个expand选项。我唯一的选择是将我的因子转换为连续变量并放弃漂亮的因子标签吗 这是相关代码 plotYieldCurve <- ggplot(data=yieldCu

我有一个
ggplot2
图,其中x轴变量是一个因子,但表示月份和年份的不同时间跨度(1m、3m、6m、1y、2y、3y、5y、7y、10y、20y和30y——这是一个)。因子变量为我提供了很好的标签,但间距也很小。我希望x轴间距与时间跨度成比例

我认为这种调整应该通过
scale\u x\u discrete()
,但我只看到一个
expand
选项。我唯一的选择是将我的因子转换为连续变量并放弃漂亮的因子标签吗

这是相关代码

plotYieldCurve <- ggplot(data=yieldCurveSub, aes(x=variable, y=value, group=Date))
plotYieldCurve <- plotYieldCurve + geom_line(aes(linetype=factor(Date)))
plotYieldCurve <- plotYieldCurve + xlab("Maturity") 
plotYieldCurve <- plotYieldCurve + ylab("YTM") 
plotYieldCurve <- plotYieldCurve + labs(linetype="Date") 
plotYieldCurve

将它们视为数字是可以接受的吗

yieldCurveSub$variable <- ifelse(grepl("mo", yieldCurveSub$variable), 
                                 as.numeric(as.character(gsub("[^0-9]", "", yieldCurveSub$variable))) / 12,
                                 as.numeric(as.character(gsub("[^0-9]", "", yieldCurveSub$variable))))

ggplot(yieldCurveSub) + 
    geom_point(aes(x = variable, y = value)) + 
    scale_x_continuous(breaks = c(1/12, 3/12, 6/12, 1, 2, 3, 5, 7, 10,20, 30),
                       labels = c("1 mo", "3 mo", "6 mo", "1 yr", "2 yr", "3 yr", "5 yr", "7 yr", 
                                  "10 yr", "20 yr", "30 yr")
yieldCurveSub$变量
yieldCurveSub$variable <- ifelse(grepl("mo", yieldCurveSub$variable), 
                                 as.numeric(as.character(gsub("[^0-9]", "", yieldCurveSub$variable))) / 12,
                                 as.numeric(as.character(gsub("[^0-9]", "", yieldCurveSub$variable))))

ggplot(yieldCurveSub) + 
    geom_point(aes(x = variable, y = value)) + 
    scale_x_continuous(breaks = c(1/12, 3/12, 6/12, 1, 2, 3, 5, 7, 10,20, 30),
                       labels = c("1 mo", "3 mo", "6 mo", "1 yr", "2 yr", "3 yr", "5 yr", "7 yr", 
                                  "10 yr", "20 yr", "30 yr")