在箱线图,条形图中基于公式绘制因子的坐标

时间:2014-04-17 15:28:33

标签: r graphics formula boxplot stripchart

我正在使用boxplot和stripchart基于几个分类变量(因子,x变量)绘制连续数据(y变量)。 为此,默认绘图功能提供了一个方便的基于公式的界面,我可以在其中输入数据: 响应〜因子1 +因子2 + ...... 并获得因子1,因子2等的组合作为x轴坐标。

但是,我正在努力找出这些原始坐标值对于我的数据是什么,因为我想在我的图中注释一些值。

示例:

data(iris)
iris[,"DummyFactor"] <- as.factor(c("First", "Second"))
boxplot(Sepal.Length ~ Species + DummyFactor, data = iris)
stripchart(Sepal.Length ~ Species + DummyFactor, data = iris, vertical=T, add=T, pch=16)

# y-axis values:
ys <- iris[,"Sepal.Length"]
# x-axis:
# How to obtain the x-axis values on my current plot?

实验上我发现这个例子中的x值是:

xs <- apply(model.matrix(~ -1 + Species + DummyFactor, data = iris), MARGIN=1, FUN=function(x) sum(c(1,2,3,3)[as.logical(x)]))
# Annotate a few examples, e.g. 7th, 100th and 120th observation
points(x=xs[c(7,100,120)], y=ys[c(7,100,120)], pch=16, col="red", cex=2)
iris[c(7,100,120),]
#> iris[c(7,100,120),]
#    Sepal.Length Sepal.Width Petal.Length Petal.Width    Species DummyFactor
#7            4.6         3.4          1.4         0.3     setosa       First
#100          5.7         2.8          4.1         1.3 versicolor      Second
#120          6.0         2.2          5.0         1.5  virginica      Second

......哪个有效,但似乎不是解决这个问题的正确方法。似乎boxplot和stripchart的公式实现对用户是隐藏的。

Boxplot/stripchart example

在一般情况下,有一种简单的方法可以获得这些坐标吗?

1 个答案:

答案 0 :(得分:1)

请参阅at中的?boxplot参数:
&#34;数字向量给出应绘制箱图的位置,[...];默认为1:n其中n是框的数量。&#34;

你可以从例如: names对象中的boxplot位置(请参阅?boxplot中的&#39;值&#39}:

bp <- boxplot(Sepal.Length ~ Species + DummyFactor, data = iris)
bp
bp$names

对这些方框进行排序,使得绘图公式(Species)中第一个因子的水平变化最快,然后是第二个(DummyFactor)。获取方框数:

length(bp$names)

创建默认x(at)坐标的矢量:

at <- seq_along(bp$names)

可以从以下方面获得相同的值:

at <- with(iris, seq_along(levels(interaction(Species, DummyFactor))))

从Species和DummyFactor之间的交互中创建一个因子。这将用于&#39; at&#39;

的子集化
intr <- with(iris, interaction(Species, DummyFactor))

将x坐标添加到数据框:

iris$at <- at[intr]

添加积分:

points(Sepal.Length ~ at, data = iris[c(7, 100, 120), ], pch = 16, col = "red", cex = 2)