gpt4 book ai didi

r - 如何将按组绘图元素叠加到 ggplot2 方面?

转载 作者:行者123 更新时间:2023-12-02 07:08:57 26 4
gpt4 key购买 nike

我的问题与分面有关。在下面的示例代码中,我查看了一些分面散点图,然后尝试在每个分面的基础上叠加信息(在本例中为平均线)。

tl;dr 版本是我的尝试失败了。要么我添加的平均线计算所有数据(不尊重方面变量),要么我尝试编写一个公式,但 R 抛出错误,然后是对我母亲的尖锐且特别贬低的评论。

library(ggplot2)

# Let's pretend we're exploring the relationship between a car's weight and its
# horsepower, using some sample data
p <- ggplot()
p <- p + geom_point(aes(x = wt, y = hp), data = mtcars)
print(p)

# Hmm. A quick check of the data reveals that car weights can differ wildly, by almost
# a thousand pounds.
head(mtcars)

# Does the difference matter? It might, especially if most 8-cylinder cars are heavy,
# and most 4-cylinder cars are light. ColorBrewer to the rescue!
p <- p + aes(color = factor(cyl))
p <- p + scale_color_brewer(pal = "Set1")
print(p)

# At this point, what would be great is if we could more strongly visually separate
# the cars out by their engine blocks.
p <- p + facet_grid(~ cyl)
print(p)

# Ah! Now we can see (given the fixed scales) that the 4-cylinder cars flock to the
# left on weight measures, while the 8-cylinder cars flock right. But you know what
# would be REALLY awesome? If we could visually compare the means of the car groups.
p.with.means <- p + geom_hline(
aes(yintercept = mean(hp)),
data = mtcars
)
print(p.with.means)

# Wait, that's not right. That's not right at all. The green (8-cylinder) cars are all above the
# average for their group. Are they somehow made in an auto plant in Lake Wobegon, MN? Obviously,
# I meant to draw mean lines factored by GROUP. Except also obviously, since the code below will
# print an error, I don't know how.
p.with.non.lake.wobegon.means <- p + geom_hline(
aes(yintercept = mean(hp) ~ cyl),
data = mtcars
)
print(p.with.non.lake.wobegon.means)

我一定缺少一些简单的解决方案。

最佳答案

你的意思是这样的:

rs <- ddply(mtcars,.(cyl),summarise,mn = mean(hp))

p + geom_hline(data=rs,aes(yintercept=mn))

也许可以在 ggplot 范围内执行此操作使用 stat_* 调用电话,但我必须回去修改一下。但一般来说,如果我将摘要添加到多面图中,我会单独计算摘要,然后将它们添加到它们自己的 geom 中。 .

编辑

只是对您最初的尝试进行一些扩展说明。一般来说,最好输入 aes来电ggplot这将在整个情节中持续存在,然后在这些 geom 中指定不同的数据集或美学与“基本”情节不同。那么你不需要继续指定 data = ...在每个 geom .

最后,我想出了一种巧妙的使用 geom_smooth 的方法。做一些类似于你要求的事情:

p <- ggplot(data = mtcars,aes(x = wt, y = hp, colour = factor(cyl))) + 
facet_grid(~cyl) +
geom_point() +
geom_smooth(se=FALSE,method="lm",formula=y~1,colour="black")

水平线(即常数回归方程)只会延伸到每个方面的数据限制,但它会跳过单独的数据汇总步骤。

关于r - 如何将按组绘图元素叠加到 ggplot2 方面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6684549/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com