R 如何将颜色应用于ggplot2中的函数

R 如何将颜色应用于ggplot2中的函数,r,ggplot2,R,Ggplot2,我有一个数据框,我喜欢打印,但ggplot不接受我在AES中添加颜色。我得到的不是3个不同的图,而是一个图。我期待3个不同的图表。有人能看出我做错了什么吗 df <- data.frame( xNames= c("lisa", "frank", "johnny"), coef_a = c(20,25,30), coef_b = c(1,3,5) ) ggplot(data=df, aes(color= xNames

我有一个数据框,我喜欢打印,但ggplot不接受我在AES中添加颜色。我得到的不是3个不同的图,而是一个图。我期待3个不同的图表。有人能看出我做错了什么吗

 df <- data.frame( xNames= c("lisa", "frank", "johnny"),
                coef_a = c(20,25,30),
                coef_b = c(1,3,5)  )


 ggplot(data=df, aes(color=  xNames)  ) +
 stat_function( fun = function(x) (df$coef_a*x) /(df$coef_b+x), size=1,linetype = 
  "dashed") 
 + xlim(0, 10)

如果要为
xNames
中的每个值显示不同的图表,则需要使用
facet\u wrap
而不是
aes(color)
<代码>颜色在
aes
中使用时,将变量中的每个值映射为不同的颜色
facet_wrap
为变量中的每个值创建一个图表

df <- data.frame(
  xNames = c("lisa", "frank", "johnny"),
  coef_a = c(20, 25, 30),
  coef_b = c(1, 3, 5)
)

ggplot(data = df) +
  stat_function(
    fun = function(x)
      (df$coef_a * x) / (df$coef_b + x),
    size = 1,
    linetype =
      "dashed"
  ) +
  xlim(0, 10) +
  facet_wrap(~ xNames)

df问题在于
stat_function
中的
fun
采用单个向量变量,并为x轴上的每个点返回y值向量。它不会映射到单个组。有很多方法可以解决这个问题——请参阅和

通常,通过使用计算结果创建新的数据框并进行打印,可以获得更好的控制:

fun    <- function(x, a, b) (a * x) / (b + x)
xvals  <- seq(0, 10, 0.1)
yvals  <- mapply(function(a, b) fun(xvals, a, b), a = df$coef_a, b = df$coef_b, SIMPLIFY = F)
yvals  <- do.call(c, yvals)
groups <- rep(df$xNames, each = length(xvals))
df2    <- data.frame(xvals = rep(xvals, 3), yvals, groups)

ggplot(data = df2, aes(xvals, yvals, colour = groups)) +
 geom_line(size = 1, linetype = "dashed")

fun这不是艾伦·卡梅隆通常给你的解决方案,但也许只是为了帮助你看看它在
ggplot
中的效果

库(ggplot2)

你收到了什么错误信息?如果您发布问题的
reprex
,这会很有帮助。
fun    <- function(x, a, b) (a * x) / (b + x)
xvals  <- seq(0, 10, 0.1)
yvals  <- mapply(function(a, b) fun(xvals, a, b), a = df$coef_a, b = df$coef_b, SIMPLIFY = F)
yvals  <- do.call(c, yvals)
groups <- rep(df$xNames, each = length(xvals))
df2    <- data.frame(xvals = rep(xvals, 3), yvals, groups)

ggplot(data = df2, aes(xvals, yvals, colour = groups)) +
 geom_line(size = 1, linetype = "dashed")