【问题标题】:adding different curves to plots in R将不同的曲线添加到 R 中的绘图
【发布时间】:2020-08-24 05:53:21
【问题描述】:

我知道我可以使用latticelatticeExtra R 包将相同的曲线添加到每个绘图窗格中作为layer见打击)。

但假设我们想向每个绘图窗格添加不同的曲线

例如,在下面的示例中,我想知道如何将v1 仅添加到顶图,将v2 添加到左下图,以及v3 右下图?

library(lattice)
library(latticeExtra)    

set.seed(24)
v1 <- density(rnorm(1e3, 3.5))
v2 <- density(rnorm(1e3, 3))
v3 <- density(rnorm(1e3, 2.75))


foo <- xyplot((1:32*.01)~wt|gear , data = mtcars)
foo + layer(panel.polygon(v1, col = 2, alpha = 0.3))

【问题讨论】:

  • 使用 facet_gridfacet_wrap 的 ggplot2 很容易。使用 lattice 有什么好处吗?
  • 好的,谢谢你的提问。
  • 有趣。对不起,我没有完全欣赏你在做什么。我会努力的。

标签: r plot lattice


【解决方案1】:

您可以使用ggplot2facet_grid 来做到这一点:

library(ggplot2)
library(dplyr)

# user data
v1 <- (rnorm(1e3, 3.5))
v2 <- (rnorm(1e3, 3))
v3 <- (rnorm(1e3, 2.75))

# Make df1 from user data and associate with add gear value in `mtcars`
df1 <- data.frame(wt = c(v1, v2, v3),
                gear = as.factor(c(rep(3, 1000),
                        rep(4, 1000), 
                        rep(5, 1000))))

# select data from mtcars and add user defined values (`val`)
df2 <- mtcars %>% 
  mutate(val = 1:32 * 0.01) %>% 
  remove_rownames() %>% 
  mutate(gear = as.factor(gear)) %>% 
  select(c(val, gear, wt))


ggplot(df2, aes(x = wt, y = val,  #set up mapping with df2
                fill = gear)) + 
  geom_density(data = df1,  #make density plots of df1
      aes(x = wt, 
          fill = gear),
      inherit.aes = FALSE) + #next add points from df1
  geom_point(data = df2, aes(x = wt, y = val), inherit.aes = FALSE) +
  facet_grid(cols = vars(gear)) 


您可以通过向geom_density 添加一个 alpha 值来使填充颜色更加透明。

【讨论】:

  • 修改后的答案使用您的数据并添加所需的点。
  • @Reza 你看到这个答案了吗?希望对您有所帮助。
【解决方案2】:

这是一种选择

foo + 
   layer(if(panel.number() == 3) {
            panel.polygon(v1, col = 2, alpha = 0.3)
      } else if(panel.number() == 1) {
            panel.polygon(v2, col = 2, alpha = 0.3)
      } else{
           panel.polygon(v3, col = 2, alpha = 0.3)
    })

数据

library(lattice)
library(latticeExtra)    

set.seed(24)
v1 <- density(rnorm(1e3, 3.5))
v2 <- density(rnorm(1e3, 3))
v3 <- density(rnorm(1e3, 2.75))


foo <- xyplot((1:32*.01)~wt|gear , data = mtcars)

【讨论】:

  • @Reza 我再次检查了代码,对不起,我无法得到那个错误
  • @Reza 这些是我使用的包的版本packageVersion('lattice') [1] ‘0.20.38’ &gt; packageVersion('latticeExtra') [1] ‘0.6.28’,我只使用你的例子
  • @Reza 是的,我在你的帖子中创建了 'v1'、'v2'、'v3'
  • @Reza 它是逆时针方向
猜你喜欢
  • 2020-08-21
  • 1970-01-01
  • 2021-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-12
  • 1970-01-01
相关资源
最近更新 更多