我经常喜欢通过创建一个向量来指定绘图参数,比如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)发布于 2018-08-12 09:36:52
简短的回答:
这不能用stripchart来实现。
为了按照您想要的方式使用pch,您需要“手工”绘制绘图。
更长的答案:
stripchart的源代码包含以下内容(其中...意味着我遗漏了一些代码):
n <- length(groups)
...
for (i in seq_len(n)) {
...
points(..., pch = pch[(i - 1L)%%length(pch) + 1L]我们看到,根据i为pch参数分配了一个标量值。因此,从本质上讲,它只允许pch用于按组指定绘图符号,而不能用于按您想要的方式逐点指定符号。
请注意,这是特定于stripchart的行为,并不是R中的所有绘图函数都必需的,因为在R中,绘图是按因子完成的。
顺便说一句:
在上面的代码中,您的条件永远不会为真:
which(iris$Petal.Length < 0.4)
integer(0)因此,即使stripchart按您希望的方式允许pch,您的代码也不能很好地完成任务。您需要的是< 5或其他东西,而不是< 0.4。
发布于 2018-08-12 12:56:50
您可以使用子集参数,正确的方法是
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)https://stackoverflow.com/questions/51804892
复制相似问题