Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 带有ggplot的气泡图上的每组平均值_R_Ggplot2 - Fatal编程技术网

R 带有ggplot的气泡图上的每组平均值

R 带有ggplot的气泡图上的每组平均值,r,ggplot2,R,Ggplot2,我有一个有很多重叠点的数据集,用ggplot创建了一个气泡图来显示数据。我需要在绘图上为x轴上每组的平均值添加条形图(值可以是0、1或2)。我曾尝试使用geom_errorbar,但未能使其与我的数据一起工作。如有任何帮助/建议,将不胜感激 以下是我的代码和脚本,用于生成类似的伪数据: y <- seq(from=0, to=3.5, by=0.5) x <- seq(from=0, to=2, by=1) xnew <- sample(x, 100, replace=T) y

我有一个有很多重叠点的数据集,用ggplot创建了一个气泡图来显示数据。我需要在绘图上为x轴上每组的平均值添加条形图(值可以是0、1或2)。我曾尝试使用geom_errorbar,但未能使其与我的数据一起工作。如有任何帮助/建议,将不胜感激

以下是我的代码和脚本,用于生成类似的伪数据:

y <- seq(from=0, to=3.5, by=0.5)
x <- seq(from=0, to=2, by=1)
xnew <- sample(x, 100, replace=T)
ynew <- sample(y, 100, replace=T)
data <- data.frame(xnew,ynew)

data2 <- aggregate(data$xnew, by=list(x=data$xnew, y=data$ynew), length)
names(data2)[3] <- "Count"

ggplot(data2, aes(x = x, y = y)) + 
    geom_point(aes(size=Count)) + 
    labs(x = "Copies", y = "Score") + 
    aes(ymax=..y.., ymin=..y..) + 
    scale_x_continuous(breaks = seq(0, 2, 1)) + 
    scale_y_continuous(breaks = seq(0, 3, 0.5)) + 
    theme(legend.position = "bottom", legend.direction = "horizontal", 
    axis.line = element_line(size=1, colour = "black"), 
    panel.grid.major = element_blank(), 
    panel.grid.minor = element_blank(), 
    panel.border = element_blank(), 
    panel.background = element_blank(), 
    axis.text.x = element_text(colour="black", size = 10), 
    axis.text.y = element_text(colour="black", size = 10))

y这就是你想要的吗?我首先使用
dplyr
包计算了组级平均值,然后使用
geom_段
将线段添加到绘图中:

library(ggplot2)
library(dplyr)
data2 <- data2 %>% group_by(x) %>% mutate(mean.y = mean(y))
ggplot(data2, aes(x = x, y = y)) + 
geom_point(aes(size=Count)) + 
labs(x = "Copies", y = "Score") + 
aes(ymax=..y.., ymin=..y..) + 
scale_x_continuous(breaks = seq(0, 2, 1)) + 
scale_y_continuous(breaks = seq(0, 3, 0.5)) + 
theme(legend.position = "bottom", legend.direction = "horizontal", 
    axis.line = element_line(size=1, colour = "black"), 
    panel.grid.major = element_blank(), 
    panel.grid.minor = element_blank(), 
    panel.border = element_blank(), 
    panel.background = element_blank(), 
    axis.text.x = element_text(colour="black", size = 10), 
    axis.text.y = element_text(colour="black", size = 10)) +
geom_segment(aes(y = mean.y, yend = mean.y, x = x -0.25, xend = x + 0.25))
库(ggplot2)
图书馆(dplyr)
数据2%组_由(x)%>%突变(平均值y=平均值(y))
ggplot(数据2,aes(x=x,y=y))+
几何点(aes(大小=计数))+
实验室(x=“复印件”,y=“分数”)+
aes(ymax=…y..,ymin=…y..)+
比例x连续(中断=顺序(0,2,1))+
连续刻度(断开=顺序(0,3,0.5))+
主题(legend.position=“底部”,legend.direction=“水平”,
轴线=元素线(尺寸=1,颜色=“黑色”),
panel.grid.major=元素_blank(),
panel.grid.minor=元素_blank(),
panel.border=元素_blank(),
panel.background=元素_blank(),
axis.text.x=元素\文本(color=“black”,size=10),
axis.text.y=元素\文本(color=“black”,size=10))+
geom_段(aes(y=mean.y,yend=mean.y,x=x-0.25,xend=x+0.25))

我不能完全肯定我是否正确理解了你的问题。在我看来,除了气泡之外,您还希望将
y
的每个
x
值的平均值可视化为某种条形图。(您提到了错误条,但这似乎不是一个要求,而是您已经尝试过的。我将使用
geom\u col()

我假设您想通过计数对
y
的平均值进行加权,即
sum(y*Count)/sum(Count)
。您可以使用
dplyr
创建包含这些值的数据框:

data2_mean
## # A tibble: 3 × 2
##       x        y
##   <dbl>    <dbl>
## 1     0 1.833333
## 2     1 1.750000
## 3     2 2.200000
与您的代码相比,我更改的所有内容都出现在
scale\u x\u continuous()
之前。这将生成以下绘图:


这正是我想要做的。我只需要在代码中创建count对象的部分添加回去。非常感谢。那不是我想要的。我需要一个更薄的酒吧在平均。不过,谢谢你的意见。我感谢你的建议。
ggplot() + 
    geom_col(aes(x = x, y = y), data2_mean, fill = "gray60", width = 0.7) + 
    geom_point(aes(x = x, y = y, size = Count), data2) + 
    labs(x = "Copies", y = "Score") + 
    scale_x_continuous(breaks = seq(0, 2, 1)) + 
    scale_y_continuous(breaks = seq(0, 3, 0.5)) + 
    theme(legend.position = "bottom", legend.direction = "horizontal", 
    axis.line = element_line(size=1, colour = "black"), 
    panel.grid.major = element_blank(), 
    panel.grid.minor = element_blank(), 
    panel.border = element_blank(), 
    panel.background = element_blank(), 
    axis.text.x = element_text(colour="black", size = 10), 
    axis.text.y = element_text(colour="black", size = 10))