R GG根据x值绘制点数

R GG根据x值绘制点数,r,ggplot2,R,Ggplot2,我有一个问题来自哈德利·威克姆的ggplot2书。 我这里有一个数据框: class <- mpg %>% group_by(class) %>% summarise(n = n(), hwy = mean(hwy)) 这并没有给出上面的图表。 有人有什么有用的建议吗?多亏@JakeKaupp: library(dplyr); library(ggplot2) class <- mpg %>% count(class) %>% mutat

我有一个问题来自哈德利·威克姆的ggplot2书。 我这里有一个数据框:

class <- mpg %>%
   group_by(class) %>% 
   summarise(n = n(), hwy = mean(hwy))
这并没有给出上面的图表。
有人有什么有用的建议吗?

多亏@JakeKaupp:

library(dplyr); library(ggplot2)
class <- mpg %>%
 count(class) %>% 
 mutate(label = paste0("n = ", n))

ggplot(data = mpg, aes(class, hwy)) +
 geom_jitter(width = 0.1) +
 stat_summary(geom = "point", fun.y = mean, colour = "red", size = 5) +
 geom_text(data = class, aes(y = 10, label = label))
库(dplyr);图书馆(GG2)
类别%
计数(类)%>%
变异(标签=粘贴0(“n=,n))
ggplot(数据=mpg,aes(等级,hwy))+
几何抖动(宽度=0.1)+
统计汇总(geom=“point”,fun.y=平均值,color=“red”,size=5)+
几何图形文本(数据=类别,aes(y=10,标签=标签))

我在做同样的练习,用同样的书。这是我的代码,但它与第一个答案几乎相同,但我将尝试解释原因

ggplot(mpg, aes(class, hwy)) +
 geom_jitter(width = 0.05, size = 2) +
 geom_point(aes(y = hwy), data = class, size = 4, color = "red") +
 geom_text(aes(y = 10, label = paste0("n = ", n)), data = class)
结果是:

首先,使用ggplot()函数定义要使用的主数据集和美学。在这里,我们希望将hwy(y轴)绘制为与类(x轴)相对的点。这是第一行代码

其次,请记住,ggplot2通过逐层绘制图形来工作。第二行代码是我们要添加的第一层。与使用geom_point()的散点图不同,我们希望使用抖动图来避免在geom_point()中过度绘制。在这里,我们使用相同的数据集-mpg,并使用相同的美学(x=class,y=hwy),正如我们在ggplot()中所指出的那样,因此我们不做任何更改。但是,为了使它看起来与教科书中的原始绘图相似,我们想要压缩宽度=0.05(或者你可以将这个数字调整为0.1,0.2来查看),我们可以添加大小=2或1或3,这无关紧要

第三,我们希望在原始图形中创建相同的红点。这个红点,是第三层。这里我使用geom_point(),因为这些红点基本上是点。但是,红点表示对应x值上y值的平均值。在原始数据集mpg中,我们没有这个变量。因此,在第二层红点中,我们需要重新设置一些美学和数据。我们希望y=hwy,这与ggplot()相同,但我们更改了数据集,使data=class。现在,层知道每个类匹配1个y轴值,即hwy作为平均值。我们有红色的圆点,但我们也希望形状的大小,使它看起来大,颜色为红色

最后,添加标签层。任何注释,我们都使用geom_text()层来完成。我们设置了aes(y=10),因为这设置了靠近y=10位置的标签高度。然后我们要设置标签值。但是在这里,我们只知道n,也就是计数。但在原始图中,它是n=整数。所以我们需要使用paste0()函数来连接字符串和数字。write,label=paste0(“n=”,n)以产生n=integer的效果,然后,我们设置data=class,因为我们没有使用原始mpg


然后完成图形。您还可以添加标题或x、y轴标签等。但我的方法是编写一层,运行代码检查它的外观,然后编写另一层。它可以帮助您思考整个图形。希望能有帮助

当询问ggplot2问题(或任何其他主动维护且有点脆弱的软件包)时,请始终指定您使用的软件包版本。和/或确认它与ggplot2的其他已知良好版本相冲突。让我详细说明一下。在这些数据中,当我编写geom_point()代码时,这些点都是直线排列的,但是geom_jitter()使这些点看起来都是分散的,而不是直线。geom_jitter()是否显示数据的准确表示?
ggplot(mpg, aes(class, hwy)) +
 geom_jitter(width = 0.05, size = 2) +
 geom_point(aes(y = hwy), data = class, size = 4, color = "red") +
 geom_text(aes(y = 10, label = paste0("n = ", n)), data = class)