在R

时间:2018-08-12 00:53:40

标签: r vector plot

我经常喜欢通过创建一个向量来指定像pchcol这样的绘图参数,其值对应于所有单个数据点的某些方面。但是,当按因子对数据进行绘制时,该策略似乎不起作用,因为将通过将向量的第一个值分配给第一组,第二个值分配给第二组来分配plot参数,依此类推,而不是将第一个值赋予第一个点,等等。

这是我想做的一个例子。例如,假设我要制作一个花瓣长度的带状图,按虹膜种类分组,但同时指定具有一定花瓣长度的标本应具有不同的绘图符号。

data("iris")

pch <- rep(16, length(iris$Petal.Length))
pch[which(iris$Petal.Length < 0.4 )] <- 17

stripchart(Petal.Length ~ Species, data = iris, 
       vertical = TRUE, method = "jitter", 
       pch = pch)

2 个答案:

答案 0 :(得分:1)

简短答案:

这不适用于stripchart

您需要“手工”制作情节,以便按照自己的方式使用pch

更长的答案:

stripchart的源代码如下(其中...表示我遗漏了一些代码):

n <- length(groups)
...
for (i in seq_len(n)) {
...
points(..., pch = pch[(i - 1L)%%length(pch) + 1L]

我们看到根据pchi自变量分配了标量值。因此,从本质上讲,它仅允许pch用于按组指定绘图符号,而不能用于按点指定符号,就像您想要的那样。

请注意,这是特定于stripchart的行为,对于R中按因子进行绘制的所有绘制函数而言,并不是必需的。

顺便说一句:

在上面的代码中,您的条件永远不会成立:

which(iris$Petal.Length < 0.4)
integer(0)

因此,即使stripchart允许pch以您希望的方式运行,您的代码也无法完全解决问题。您需要< 5之类的东西,而不是< 0.4

答案 1 :(得分:0)

您可以使用子集参数,正确的方法是

data("iris")
stripchart(Petal.Length ~ Species, data = iris, subset = Petal.Length > 1.4,
   vertical = TRUE, method = "jitter", ylim = c(1,7),
   pch = 16)
stripchart(Petal.Length ~ Species, data = iris, subset = Petal.Length < 1.4,
   vertical = TRUE, method = "jitter", add = TRUE,
   pch = 17)