Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.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
如何将每个绘图指向正确的y轴(多个绘图,两个y轴,在带有ggplot2的R中)_R_Ggplot2_Axis_Axis Labels_Axes - Fatal编程技术网

如何将每个绘图指向正确的y轴(多个绘图,两个y轴,在带有ggplot2的R中)

如何将每个绘图指向正确的y轴(多个绘图,两个y轴,在带有ggplot2的R中),r,ggplot2,axis,axis-labels,axes,R,Ggplot2,Axis,Axis Labels,Axes,所以我比较了两组,第三组使用一系列输入。对于三组中的每一组,我都有一个输入范围的值和置信区间。对于这两个比较,我也有一个p值用于该输入范围。现在我想绘制所有五个数据系列,但使用第二个轴表示p值 我能够做到这一点,除了一件事:我如何确保R知道要分配给第二个轴的图 这就是现在的样子。底部的两个数据系列应按比例放大到右侧的Y轴 ggplot(df) + geom_pointrange(aes(x=x, ymin=minc, ymax=maxc, y=meanc, color="c")) +

所以我比较了两组,第三组使用一系列输入。对于三组中的每一组,我都有一个输入范围的值和置信区间。对于这两个比较,我也有一个p值用于该输入范围。现在我想绘制所有五个数据系列,但使用第二个轴表示p值

我能够做到这一点,除了一件事:我如何确保R知道要分配给第二个轴的图

这就是现在的样子。底部的两个数据系列应按比例放大到右侧的Y轴

ggplot(df) + 
  geom_pointrange(aes(x=x, ymin=minc, ymax=maxc, y=meanc, color="c")) + 
  geom_pointrange(aes(x=x, ymin=minb, ymax=maxb, y=meanb, color="b")) +
  geom_pointrange(aes(x=x, ymin=mina, ymax=maxa, y=meana, color="a")) +
  geom_point(aes(x=x, y=c, color="c")) +
  geom_point(aes(x=x, y=b, color="b")) +
  scale_y_continuous(sec.axis = sec_axis(~.*0.2))
df是一个数据帧,其列名是上面列出的所有变量,所有行值都是相应的数据点


如果您将DF从宽转换为长,并在means和CI之间使用不同的aes(即形状、颜色、填充),您就可以得到您想要的,忠实于哈德利的大炮和图形福音语法

你没有提供一个可复制的例子,所以我用我自己的。(Dput在职位末尾)

df2%
mutate(CatCI=if_else(is.na(CI),“”,Cat))#创建分类名称以将CI映射到图例。
ggplot(df2,aes(x=x))+
几何点范围(aes(ymin=min,ymax=max,y=mean,color=Cat,shape=16)+
geom_point(data=dplyr::filter(df2,!is.na(CI)),##过滤CI中的na
aes(y=(CI/0.2),##变换CI的y位置以适合右轴。
fill=CatCI),##将第二个aes称为aes
shape=25,size=5,alpha=0.25)+##我更改了形状、大小和填充以帮助可视化
比例y连续(秒轴=秒轴(~*0.2,name=“P值”))+
实验室(color=“Linerange\nsister Axis”,fill=“P value\nDexter Axis”,y=“Mean”)
结果:

数据帧:

df <- structure(list(Cat = c("a", "b", "c", "a", "b", "c", "a", "b", 
"c", "a", "b", "c", "a", "b", "c"), x = c(2, 2, 2, 2.20689655172414, 
2.20689655172414, 2.20689655172414, 2.41379310344828, 2.41379310344828, 
2.41379310344828, 2.62068965517241, 2.62068965517241, 2.62068965517241, 
2.82758620689655, 2.82758620689655, 2.82758620689655), mean = c(0.753611797661977, 
0.772340941644911, 0.793970086962944, 0.822424652072316, 0.837015408776649, 
0.861417383841253, 0.87023105762465, 0.892894201949377, 0.930096326498796, 
0.960862178366363, 0.966600321596147, 0.991206984637544, 1.00714201832596, 
1.02025006679944, 1.03650896186786), max = c(0.869753641121797, 
0.928067675294351, 0.802815304215019, 0.884750162053761, 1.03609814491961, 
0.955909854315582, 1.07113399603486, 1.02170928767791, 1.05504846273091, 
1.09491706586801, 1.20235615364205, 1.12035782960649, 1.17387406039167, 
1.13909154635088, 1.0581878034897), min = c(0.632638511783381, 
0.713943701135991, 0.745868763626567, 0.797491261486603, 0.743382797144923, 
0.827693203320894, 0.793417962991821, 0.796917421637021, 0.92942504556723, 
0.89124101157585, 0.813058838839382, 0.91701749675892, 0.943744642652422, 
0.912869230576973, 0.951734254896252), CI = c(NA, 0.164201137643034, 
0.154868406784159, NA, 0.177948094206453, 0.178360305763648, 
NA, 0.181862670931493, 0.198447350829814, NA, 0.201541499248143, 
0.203737532636542, NA, 0.205196077692786, 0.200992205838595), 
    CatCI = c("", "b", "c", "", "b", "c", "", "b", "c", "", "b", 
    "c", "", "b", "c")), .Names = c("Cat", "x", "mean", "max", 
"min", "CI", "CatCI"), row.names = c(NA, 15L), class = "data.frame")

df如果你将df从宽转换为长,并在means和CI之间使用不同的aes(即形状、颜色、填充),你可以得到你想要的,忠实于哈德利的大炮和图形福音语法

你没有提供一个可复制的例子,所以我用我自己的。(Dput在职位末尾)

df2%
mutate(CatCI=if_else(is.na(CI),“”,Cat))#创建分类名称以将CI映射到图例。
ggplot(df2,aes(x=x))+
几何点范围(aes(ymin=min,ymax=max,y=mean,color=Cat,shape=16)+
geom_point(data=dplyr::filter(df2,!is.na(CI)),##过滤CI中的na
aes(y=(CI/0.2),##变换CI的y位置以适合右轴。
fill=CatCI),##将第二个aes称为aes
shape=25,size=5,alpha=0.25)+##我更改了形状、大小和填充以帮助可视化
比例y连续(秒轴=秒轴(~*0.2,name=“P值”))+
实验室(color=“Linerange\nsister Axis”,fill=“P value\nDexter Axis”,y=“Mean”)
结果:

数据帧:

df <- structure(list(Cat = c("a", "b", "c", "a", "b", "c", "a", "b", 
"c", "a", "b", "c", "a", "b", "c"), x = c(2, 2, 2, 2.20689655172414, 
2.20689655172414, 2.20689655172414, 2.41379310344828, 2.41379310344828, 
2.41379310344828, 2.62068965517241, 2.62068965517241, 2.62068965517241, 
2.82758620689655, 2.82758620689655, 2.82758620689655), mean = c(0.753611797661977, 
0.772340941644911, 0.793970086962944, 0.822424652072316, 0.837015408776649, 
0.861417383841253, 0.87023105762465, 0.892894201949377, 0.930096326498796, 
0.960862178366363, 0.966600321596147, 0.991206984637544, 1.00714201832596, 
1.02025006679944, 1.03650896186786), max = c(0.869753641121797, 
0.928067675294351, 0.802815304215019, 0.884750162053761, 1.03609814491961, 
0.955909854315582, 1.07113399603486, 1.02170928767791, 1.05504846273091, 
1.09491706586801, 1.20235615364205, 1.12035782960649, 1.17387406039167, 
1.13909154635088, 1.0581878034897), min = c(0.632638511783381, 
0.713943701135991, 0.745868763626567, 0.797491261486603, 0.743382797144923, 
0.827693203320894, 0.793417962991821, 0.796917421637021, 0.92942504556723, 
0.89124101157585, 0.813058838839382, 0.91701749675892, 0.943744642652422, 
0.912869230576973, 0.951734254896252), CI = c(NA, 0.164201137643034, 
0.154868406784159, NA, 0.177948094206453, 0.178360305763648, 
NA, 0.181862670931493, 0.198447350829814, NA, 0.201541499248143, 
0.203737532636542, NA, 0.205196077692786, 0.200992205838595), 
    CatCI = c("", "b", "c", "", "b", "c", "", "b", "c", "", "b", 
    "c", "", "b", "c")), .Names = c("Cat", "x", "mean", "max", 
"min", "CI", "CatCI"), row.names = c(NA, 15L), class = "data.frame")

df您可以放大p值/0。2@SRivero哈,我喜欢这个主意。我现在就用这个。虽然我认为有一种方法可以给每个绘图赋予一个定义单位或y轴的属性,这样你就不需要改变数据值来绘图了。不要使用ggplot@斯里韦罗哈德利的第二个答案你是说?嗯,我明白了,谢谢。你会添加你的评论作为回答吗?我看到C.K.的第四个答案,也建议你解决这个问题。也看到你可以放大p值/0。2@SRivero哈,我喜欢这个主意。我现在就用这个。虽然我认为有一种方法可以给每个绘图赋予一个定义单位或y轴的属性,这样你就不需要改变数据值来绘图了。不要使用ggplot@斯里韦罗哈德利的第二个答案你是说?嗯,我明白了,谢谢。你会添加你的评论作为回答吗?我看到C.K.的第四个答案,也建议了你解决这个问题的方法