我经常喜欢通过创建一个向量来指定像pch
或col
这样的绘图参数,其值对应于所有单个数据点的某些方面。但是,当按因子对数据进行绘制时,该策略似乎不起作用,因为将通过将向量的第一个值分配给第一组,第二个值分配给第二组来分配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)
答案 0 :(得分:1)
这不适用于stripchart
。
您需要“手工”制作情节,以便按照自己的方式使用pch
。
stripchart
的源代码如下(其中...表示我遗漏了一些代码):
n <- length(groups)
...
for (i in seq_len(n)) {
...
points(..., pch = pch[(i - 1L)%%length(pch) + 1L]
我们看到根据pch
为i
自变量分配了标量值。因此,从本质上讲,它仅允许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)