Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.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
为平均值、平均值和x2B添加行;sd和R中多因子散点图的平均值-sd_R_Ggplot2 - Fatal编程技术网

为平均值、平均值和x2B添加行;sd和R中多因子散点图的平均值-sd

为平均值、平均值和x2B添加行;sd和R中多因子散点图的平均值-sd,r,ggplot2,R,Ggplot2,我有表格的数据 cvar1 cvar1 numvar a x 0.1 a y 0.2 b x 0.15 b y 0.25 也就是说,两个分类变量和一个数值变量 使用ggplot2,我可以通过qplot(y=numvar,x=interaction(cvar1,cvar2))得到一个很好的散点图,该散点图绘制了cv1和cv2的每个组合的数据。这给了我几列类似这样的观点: 对于这些列中的每一列,我想添加一条表示该

我有表格的数据

cvar1  cvar1  numvar
a      x      0.1
a      y      0.2
b      x      0.15
b      y      0.25
也就是说,两个分类变量和一个数值变量

使用ggplot2,我可以通过qplot(y=numvar,x=interaction(cvar1,cvar2))得到一个很好的散点图,该散点图绘制了
cv1
cv2
的每个组合的数据。这给了我几列类似这样的观点:


对于这些列中的每一列,我想添加一条表示该列中数据点平均值的小水平线。平均值+sd和平均值-sd有一条类似的小水平线。(有点像巴斯德化的方框图,但所有点都可见,并使用平均值和sd而不是中值和IQR。)提前感谢

您可以创建一个表格,其中包含每组点的平均值和平均值+/-sd。然后,您可以使用
geom_segment()
绘制线

首先,我创建一些示例数据:

set.seed(1245)
data <- data.frame(cvar1 = rep(letters[1:2], each = 12),
                   cvar2 = rep(letters[25:26], times = 12),
                   numvar = runif(2*12))
这三行执行以下操作:首先,将数据拆分为多个组,然后为每个组计算三个所需的值。最后,数据被转换为长格式,这是
ggplot()
所需要的。(也许您更熟悉
melt()
,它的功能与
gather()
基本相同)

最后,这将创建绘图:

gplot(data) + geom_point(aes(x = interaction(cvar1, cvar2), y = numvar)) +
  geom_segment(data = summ,
               aes(x = as.numeric(interaction(cvar1, cvar2)) - .5, 
                   xend = as.numeric(interaction(cvar1, cvar2)) + .5,
                   y = value, yend = value, colour = variable))

你可能不会想要这些颜色。我只是添加了它们以使示例更加清晰


geom_segments()
需要指定每条线的起点和终点坐标。由于交互作用(cvar1、cvar2)是一个因素,因此需要将其转换为数值,然后才能对其进行运算。我在
交互(cvar1,cvar2)
中加上和减去0.5,这使得行非常宽。选择较小的值将使线条变短。

您可以创建一个表格,其中包含每组点的平均值和平均值+/-sd。然后,您可以使用
geom_segment()
绘制线

首先,我创建一些示例数据:

set.seed(1245)
data <- data.frame(cvar1 = rep(letters[1:2], each = 12),
                   cvar2 = rep(letters[25:26], times = 12),
                   numvar = runif(2*12))
这三行执行以下操作:首先,将数据拆分为多个组,然后为每个组计算三个所需的值。最后,数据被转换为长格式,这是
ggplot()
所需要的。(也许您更熟悉
melt()
,它的功能与
gather()
基本相同)

最后,这将创建绘图:

gplot(data) + geom_point(aes(x = interaction(cvar1, cvar2), y = numvar)) +
  geom_segment(data = summ,
               aes(x = as.numeric(interaction(cvar1, cvar2)) - .5, 
                   xend = as.numeric(interaction(cvar1, cvar2)) + .5,
                   y = value, yend = value, colour = variable))

你可能不会想要这些颜色。我只是添加了它们以使示例更加清晰


geom_segments()
需要指定每条线的起点和终点坐标。由于交互作用(cvar1、cvar2)是一个因素,因此需要将其转换为数值,然后才能对其进行运算。我在
交互(cvar1,cvar2)
中加上和减去0.5,这使得行非常宽。选择一个较小的值将使行变短。

请参见
base
中的
abline
,例如,我不认为
abline
(至少在我使用它时)会有什么帮助,因为我有多个列需要添加行。另外,
abline
甚至可以使用ggplot2吗?明白了。然后,所需的
base
函数是
segments
;我不知道
ggplot2
中的等价物是什么,因此将此作为一个例子comment@BenS.
ggplot2
中有函数
geom\u abline
。您可能还想查看
geom\u vline
geom\u hline
。请参阅
base
中的
abline
,例如,我不知道
abline
有什么帮助,至少在我使用它时是这样,因为我有多个列需要添加行。另外,
abline
甚至可以使用ggplot2吗?明白了。然后,所需的
base
函数是
segments
;我不知道
ggplot2
中的等价物是什么,因此将此作为一个例子comment@BenS.
ggplot2
中有函数
geom\u abline
。您可能还想看看
geom\u vline
geom\u hline
。非常感谢。顺便问一下%>%代表什么?不客气。是管道操作员
x%>%f
只是另一种书写
f(x)
的方式。可以在
dpylr
magrittr
软件包中找到它。有关更多信息,请参阅。非常感谢。顺便问一下%>%代表什么?不客气。是管道操作员
x%>%f
只是另一种书写
f(x)
的方式。可以在
dpylr
magrittr
软件包中找到它。有关更多信息,请参阅。