使用scale_x_discrete维护自定义标签并将stat_function应用于ggplot

时间:2016-02-04 14:43:40

标签: r function plot ggplot2

我想在绘图上绘制自定义函数,例如:

df <- data.frame(x = seq(1, 20, 0.5), y = jitter(4.5*x, 20))

g <- ggplot(df, aes(x=x, y=y))
g + geom_point() + 
stat_function(fun = function(x) 4.5*x)

Plot of y = 4.5*x

但是我想要像这样修改我的x轴标签:

g + geom_point() + 
scale_x_discrete(breaks = c(1, 10, 20), labels = c("A little", "Moderate", "A lot")) +
stat_function(fun = function(x) 4.5*x)

我收到下面的警告信息,情节无法绘制:

  

警告消息:stat_function()中的计算失败:尝试   申请非职能

如何将x轴更改为我自己的自定义标签并显示我的功能?

我看了this question,但对于看似非常简单的事情,答案似乎非常复杂!

1 个答案:

答案 0 :(得分:1)

正如评论者建议的那样,您应该使用scale_x_continuous,例如

ggplot(df, aes(x=x, y=y)) + geom_point() + 
  stat_function(fun = function(x) 4.5*x) + 
   scale_x_continuous(breaks = c(1, 10, 20), 
          labels = c("A little", "Moderate", "A lot"))

当您使用scale_x_discrete时,我猜测ggplot2会将您的数据从数字更改为因子而stat_function必须检查数字 - 我基于这个事实将4.5*x更改为4.5*as.numeric(x)并不能解决问题。

但是,stat_smooth仍适用于离散比例 - lowess方法可以使用因子。