已经有很多关于这个主题的问题,但我找不到一个解决我的具体问题的答案。
我有一个barplot
(见下面的testplot1
和testplot3
)绘制了一个数据集(bardata
),并希望从另一个数据集(pointdata
)中添加点。看下面的简化示例:
bardata <- data.frame(
xname = c(1, 1, 1, 2, 2, 2, 3, 3, 3),
yvalue = c(1, 2, 3, 2, 3, 1, 4, 2, 1),
colorname = c("a", "b", "c", "a", "b", "c", "a", "b", "c")
)
pointdata <- data.frame(
xname = c(1, 1, 3),
ypos = c(2, 4, 3),
ptyname = c("p", "q", "r")
)
testplot1 <- qplot(xname, yvalue, data= bardata, stat = "identity",
fill= factor(colorname), geom = "bar")
testplot2 <- testplot1 +
geom_point(data = pointdata, mapping =
aes(x = xname, y = ypos, shape = factor(ptyname))
)
现在testplot1
运行得很好,但是testplot2
会报错:
Error in factor(colorname) : object 'colorname' not found.
我不明白他为什么这么说,想知道原因,但这不是我的主要问题,因为有一个简单的解决方法,请参见下面的testplot3
。
testplot3 <- qplot(xname, yvalue, data= bardata, stat = "identity",
fill= factor(bardata$colorname), geom = "bar")
testplot4 <- testplot3 +
geom_point(data = pointdata, mapping =
aes(x = xname, y = ypos, shape = factor(ptyname)))
现在程序提示:
错误:美学必须是长度为1,或与数据相同的长度问题:xname、ypos、factor(ptyname)。
那么我的问题是:这到底是什么意思?显然aes
和数据都是长度为3。 在pointdata
中的行数少于bardata
,但这本身不是一个问题,例如请参见这个答案:https://dev59.com/AXE95IYBdhLWcg3wY9D6#2330825
那么这里究竟发生了什么?(我该如何将我的点绘制在图中?)