ggplot2:在for循环中使用stat_function()获取颜色图例显示

小小英雄

我正在尝试使用stat_function()将一些分布添加到绘图中。我可以使用以下代码成功完成此操作:

library("ggplot2")
library("dplyr")

gg_color_hue <- function(n) {
  hues = seq(15, 375, length=n+1)
  hcl(h=hues, l=65, c=100)[1:n]
}

plotMixMdlComps <- function(x, mu, sigma, lam) {
  lam * dnorm(x, mu, sigma )
}

clusterDf <- data.frame(cluster = c(6,5,4,8,0,7,3),
                        mu = c(0.73908779, 0.43233777, 0.28041006, 0.35627709,
                               0.09330585, 0.18250758, 0.56998734),
                        sigma = c(0.06472281, 0.03218096, 0.02779751,
                                  0.02208605, 0.02716692, 0.01890661,
                                  0.02995616),
                        lambda = c(0.042749908, 0.254485536, 0.205602343,
                                   0.404705236, 0.061058220, 0.024166972,
                                   0.007231783))

cols <- nrow(clusterDf) %>%
  gg_color_hue()

inDf <- data.frame(x = c(0,1))

p <- ggplot(inDf, aes(x)) +
  xlim(0,1) +
  ylim(0,10)

for (i in 1:nrow(clusterDf)) {
  p <- p + stat_function(geom = "line", fun = plotMixMdlComps,
                         arg = list(clusterDf[i, "mu"],
                                    clusterDf[i, "sigma"],
                                    clusterDf[i, "lambda"]),
                         lwd = 1.5, colour = cols[i])
}

p

这将生成如下图:

在此处输入图片说明

但是我想有一个传说出现。在线阅读后,看来我可以将color参数包装在aes()中,如下所示:

p <- ggplot(inDf, aes(x)) +
  xlim(0,1) +
  ylim(0,10)

for (i in 1:nrow(clusterDf)) {
  p <- p + stat_function(geom = "line", fun = plotMixMdlComps,
                         arg = list(clusterDf[i, "mu"],
                                    clusterDf[i, "sigma"],
                                    clusterDf[i, "lambda"]),
                         lwd = 1.5, aes(colour = cols[i]))
}
p

但这最终生成了这样的情节,

在此处输入图片说明

我认为这与NSE有关(我仍然很难理解),NSE仅在调用cols [i]时才“解析” cols [i]。因此,每个stat_function最终都解析为具有相同的cols [i],应该是cols [7]。有没有办法让ggplot立即“解决”此问题,而不是等待调用p?

谢谢,

斯蒂布

的帮助中stat_function有一个示例,用于在同一图中显示两个功能。它还添加stat_function两次并指定显式颜色,并且不会生成自动图例:

f <- ggplot(data.frame(x = c(0, 10)), aes(x))
f + stat_function(fun = sin, colour = "red") +
  stat_function(fun = cos, colour = "blue")

因此,我怀疑用图例绘制多个函数不在的范围内stat_function

按照krlmlr的说明,您可以按如下方式创建数据集:

x <- seq(0,1,0.01)
names(clusterDf)[4]<-"lam"
fun_data <- lapply(1:nrow(clusterDf),function(i) {
               args <- clusterDf[i,-1]
               data.frame(cluster=clusterDf$cluster[i],
                          x=x,
                          y=do.call(plotMixMdlComps,c(list(x=x),args))
               )
}) %>% bind_rows

现在可以使用ggplot直接绘制:

ggplot(fun_data,aes(x=x,y=y,colour=as.factor(cluster))) + geom_line(lwd=1.5)

这使ggplot可以为您选择颜色。如果要使用指定的颜色(在您的情况下,这些颜色与ggplot选择的颜色相同),则可以添加scale_colour_manual(values=cols)到绘图中。

编辑:

或者,你也可以创建一个使用绘图数据mdplyplyr包:

library(plyr)
x <- seq(0,1,0.01)
names(clusterDf)[4]<-"lam"
fun_data <- mdply(clusterDf,function(cluster,mu,sigma,lam) {
    data.frame(cluster=cluster,
               x=x,
               y=plotMixMdlComps(x,mu,sigma,lam)
    )
}) %>% bind_rows

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在ggplot2中将图例与stat_function一起使用

来自分类Dev

如何使用for循环在ggplot2中添加'stat_function()'层?

来自分类Dev

使用stat_function时向ggplot添加图例

来自分类Dev

将ggplot2与用户定义的stat_function()集成

来自分类Dev

ggplot2:为特定域添加stat_function?

来自分类Dev

使用ggplot2对分组数据使用多个stat_function

来自分类Dev

如何使用ggplot2限制stat_function图的范围?

来自分类Dev

使用ggplot2的stat_function绘制泊松分布

来自分类Dev

使用ggplot2在分组数据上具有多个stat_function

来自分类Dev

R:将时序数据与'splinefun'和ggplot2'stat_function'一起使用

来自分类Dev

stat_function和图例:使用映射到不同变量的两个单独的颜色图例创建图

来自分类Dev

stat_function和图例:使用映射到不同变量的两个单独的颜色图例创建图

来自分类Dev

stat_function和图例:使用映射到不同变量的两个单独的颜色图例创建图

来自分类Dev

stat_function和grid.arrange在for循环中

来自分类Dev

在ggplot2中使用组,线型和颜色时使用单个图例?

来自分类Dev

R ggraph / ggplot2颜色图例无法正确显示

来自分类Dev

如何将stat_function美学映射到ggplot2中的数据?

来自分类Dev

在ggplot2中,如何使stat_function服从scale_x_log10?

来自分类Dev

文字颜色与ggplot2中使用geom_text的图例不匹配

来自分类Dev

在ggplot中使用stat_function时着色曲线的一段

来自分类Dev

使用Viridis的ggplot2中的气泡图图例颜色

来自分类Dev

不要在2图例图(R ggplot2)中的颜色图例中显示形状

来自分类Dev

使用for循环添加多行ggplot2图例

来自分类Dev

ggplot2合并颜色并填充图例

来自分类Dev

如何在 R 中使用 ggplot2 编辑图例?

来自分类Dev

ggplot2 stat_function,具有facet_grid中不同数据子集的计算参数

来自分类Dev

将 ggplot aes 中的颜色分配给 stat_function 的颜色参数

来自分类Dev

合并图例以显示多个stat_function行和原始数据点

来自分类Dev

如何使用ggplot2在geom_pointrange()类型图形中使用图例键获取垂直线

Related 相关文章

  1. 1

    在ggplot2中将图例与stat_function一起使用

  2. 2

    如何使用for循环在ggplot2中添加'stat_function()'层?

  3. 3

    使用stat_function时向ggplot添加图例

  4. 4

    将ggplot2与用户定义的stat_function()集成

  5. 5

    ggplot2:为特定域添加stat_function?

  6. 6

    使用ggplot2对分组数据使用多个stat_function

  7. 7

    如何使用ggplot2限制stat_function图的范围?

  8. 8

    使用ggplot2的stat_function绘制泊松分布

  9. 9

    使用ggplot2在分组数据上具有多个stat_function

  10. 10

    R:将时序数据与'splinefun'和ggplot2'stat_function'一起使用

  11. 11

    stat_function和图例:使用映射到不同变量的两个单独的颜色图例创建图

  12. 12

    stat_function和图例:使用映射到不同变量的两个单独的颜色图例创建图

  13. 13

    stat_function和图例:使用映射到不同变量的两个单独的颜色图例创建图

  14. 14

    stat_function和grid.arrange在for循环中

  15. 15

    在ggplot2中使用组,线型和颜色时使用单个图例?

  16. 16

    R ggraph / ggplot2颜色图例无法正确显示

  17. 17

    如何将stat_function美学映射到ggplot2中的数据?

  18. 18

    在ggplot2中,如何使stat_function服从scale_x_log10?

  19. 19

    文字颜色与ggplot2中使用geom_text的图例不匹配

  20. 20

    在ggplot中使用stat_function时着色曲线的一段

  21. 21

    使用Viridis的ggplot2中的气泡图图例颜色

  22. 22

    不要在2图例图(R ggplot2)中的颜色图例中显示形状

  23. 23

    使用for循环添加多行ggplot2图例

  24. 24

    ggplot2合并颜色并填充图例

  25. 25

    如何在 R 中使用 ggplot2 编辑图例?

  26. 26

    ggplot2 stat_function,具有facet_grid中不同数据子集的计算参数

  27. 27

    将 ggplot aes 中的颜色分配给 stat_function 的颜色参数

  28. 28

    合并图例以显示多个stat_function行和原始数据点

  29. 29

    如何使用ggplot2在geom_pointrange()类型图形中使用图例键获取垂直线

热门标签

归档