【问题标题】:Plot factor levels side by side within stripplot()在 stripplot() 中并排绘制因子水平
【发布时间】:2023-03-27 18:39:01
【问题描述】:

我正在尝试使用stripplot() 绘图功能比较几次试验中的营养元素值(N、P、K 等)。我想并排查看每种营养素的各个值,而不是在每个试验的单独图中,以便可以在每种营养素内进行现成的比较(例如,比较“试验 A”中的氮 (N) 值与来自“试验 B”的氮值)。这段代码制作了并排的图,这在 Trials 之间不容易比较:

foo <- data.frame(conc=rnorm(90),element=rep(c("N","P","K"),each=30),
                  trial=rep(c("Trial_A","Trial_B"),times=45))
stripplot(conc~element|trial,data=foo)

有没有办法散布营养值,以便只有一个大的带状图,然后最终我会使用绘图符号 (pch=) 来描绘试验?

@空白用户名: 我非常感谢代码建议。但是,我实际上是在尝试将值并排绘制在不同的点“列”中......所以在这种情况下,对于来自 2 次试验的 N、P 和 K,沿着 x 轴我将拥有,在这个顺序:N 来自试验 1,N 来自试验 2,P 来自试验 1,P 来自试验 2,K 来自试验 1,K 来自试验 2...因此,对于 3 种营养素和 2 次试验,我将有 2x3 = 6“列" 的值,而不是 3 列,其中值组合用于两个试验并用符号描绘。我希望这个描述是有道理的。如果我能做到的话,我会附上我正在尝试制作的情节的图片,但是我想我已经有了这个问题的答案:) 我想这样做的原因是因为我每次试验都有许多具有许多值的营养素,是的,当它们都被绘制在彼此之上并且我试图区分符号时,它会变得有点笨拙!

【问题讨论】:

    标签: r plot strip trial stripchart


    【解决方案1】:

    根据您的描述,我猜您希望将所有数据放入一个带状图中,您可以在其中使用pch 设置来指示各种试验。 下面的代码给出了如何实现这一点的示例。 基本上你只需要调整波浪号公式。

    我已经使用了一些非常基本的设置,但您当然可以在心里进行自定义。 我建议不要将所有数据绘制到一个图中,因为有 6 种不同类型的点在眼睛上并不容易,或者在数据之间进行比较。 但这个选择显然是你自己做的。

    require(lattice)
    foo <- data.frame(conc=rnorm(90),element=rep(c("N","P","K"),each=30),
                  trial=rep(c("Trial_A","Trial_B"),times=45))
    
    stripplot(conc~element,data=foo,pch=as.numeric(factor(foo$trial)))
    

    更新 根据评论,一个可能的解决方案是使用ggplot,而不是stripplot。 你可以随意定制这个。 详情请参阅this 帖子。

    library(ggplot2)
    p<-ggplot(foo, aes(x=element, y=conc, color=trial)) +
      geom_jitter(position=position_dodge(0.5))
    p
    

    如果您想使用stripplot,我认为您必须对数据进行一些转换。 您可以添加以下内容:

    foo$group<-paste(foo$element,foo$trial)
    stripplot(conc~group,data=foo,pch=as.numeric(factor(foo$trial)))
    

    【讨论】:

    • 非常感谢代码建议。但是,我实际上是在尝试将值并排绘制在不同的点“列”中......所以在这种情况下,对于来自 2 次试验的 N、P 和 K,沿着 x 轴我将拥有,在这个顺序:N 来自试验 1,N 来自试验 2,P 来自试验 1,P 来自试验 2,K 来自试验 1,K 来自试验 2...因此,对于 3 种营养素和 2 次试验,我将有 2x3 = 6“列” 的值,而不是 3 列,其中值在两种试验的营养素中组合并用符号描绘。
    • 查看更新后的答案。我是使用ggplot 完成的,有关详细信息,请参阅参考网站。我确信应该有使用stripplot的方法,但我认为它涉及更多的数据转换。
    • 谢谢!我最终进行了一些数据转换(重新排序列)并在stripplot 中找到了它,但我使用了ggplot 代码,并且效果也很好。对于我的期末论文,我将弄清楚如何使它在 ggplot 中看起来不错,因为学习如何使用 ggplot2 似乎非常值得。
    • 可能对有相同问题的其他人发布您的解决方案很有用。
    • 我是新来使用这个网站的,所以我不确定该把解决方案放在哪里,因为它不适合作为“评论”,但现在我意识到我可以添加一个在底部回答我自己的问题。如果我应该修改原始帖子,请告诉我。谢谢!
    猜你喜欢
    • 2017-11-07
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-18
    • 1970-01-01
    • 1970-01-01
    • 2015-10-24
    • 2021-04-16
    相关资源
    最近更新 更多