2

我正在尝试使用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=) 来描绘试验?

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

4

1 回答 1

0

根据您的描述,我猜您希望将所有数据放入一个带状图中,您可以在其中使用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. 你可以随意定制这个。有关更多详细信息,请参阅帖子。

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)))

在此处输入图像描述

于 2015-11-13T10:22:06.417 回答