R 如何使用镶嵌面包裹将yaxis设置为与xaxis geom_点相等
我正在使用ggplot绘制一个相当简单的散点图。 我主要感兴趣的是说明x轴和y轴之间的相关性。 因此,我希望X轴的极限等于Y轴的极限R 如何使用镶嵌面包裹将yaxis设置为与xaxis geom_点相等,r,ggplot2,R,Ggplot2,我正在使用ggplot绘制一个相当简单的散点图。 我主要感兴趣的是说明x轴和y轴之间的相关性。 因此,我希望X轴的极限等于Y轴的极限 ggplot(VV,aes(x=R1_Zsc,y=R2_Zsc)) + geom_point() + stat_smooth() + facet_wrap(~variable, scales="free") 我尝试了下面的变体,但也不起作用: ggplot(VV, aes(x=R1_Zsc,y=R2_Zsc)) + geom_point() +
ggplot(VV,aes(x=R1_Zsc,y=R2_Zsc)) +
geom_point() +
stat_smooth() +
facet_wrap(~variable, scales="free")
我尝试了下面的变体,但也不起作用:
ggplot(VV, aes(x=R1_Zsc,y=R2_Zsc)) +
geom_point() +
stat_smooth() +
xlim=range(c(VV$R1_Zsc,VV$R2_Zsc)) +
ylim=range(c(VV$R1_Zsc,VV$R2_Zsc)) +
facet_wrap(~variable, scales="free")
我制作了一个包含每个变量的xlimits和y限制的数据框,我想我可以使用它,但我不确定如何使用
df_rng <- ddply(VV, .(variable), summarise, min=range(c(R1_Zsc,R2_Zsc))[1],max=range(c(R1_Zsc,R2_Zsc))[2])
df_rng要生成大小相等的轴,可以将ratio=1
放入coord_fixed
中,如中的示例所示
library(ggplot2)
qplot(mpg, wt, data = mtcars) + coord_fixed(ratio = 1)
看起来关键在于按方面组创建最小值和最大值的数据集,并使用该数据集添加geom_blank
。有关简单示例,请参见
我发现思考如何使极限数据集成为这项工作的挑战部分。我将使用mpg
数据集给出一个示例
首先,使用不同比例的轴创建面:
ggplot(mpg, aes(displ, hwy)) +
geom_point() +
facet_wrap(~class, scales = "free")
现在,创建限制的数据集。我使用来自dplyr和tidyr的函数来实现这一点。这涉及到为每个面组找到两个轴变量的最小值和最大值。我在两个单独的列中执行此操作,然后将它们收集到一个列中。对于每个轴变量,该数据集基本上都需要有相同的列,因此我添加了y轴名称为last的重复列
library(tidyr)
library(dplyr)
facetlims = mpg %>%
group_by(class) %>%
summarise(min = min(displ, hwy), max = max(displ, hwy)) %>%
gather(range, displ, -class) %>%
mutate(hwy = displ, range = NULL)
Source: local data frame [14 x 3]
class displ hwy
(chr) (dbl) (dbl)
1 2seater 5.7 5.7
2 compact 1.8 1.8
3 midsize 1.8 1.8
4 minivan 2.4 2.4
5 pickup 2.7 2.7
6 subcompact 1.6 1.6
7 suv 2.5 2.5
8 2seater 26.0 26.0
9 compact 44.0 44.0
10 midsize 32.0 32.0
11 minivan 24.0 24.0
12 pickup 22.0 22.0
13 subcompact 44.0 44.0
14 suv 27.0 27.0
现在只需将带有此数据集的geom_blank
添加到原始图形中,每个面内的轴限制相同
ggplot(mpg, aes(displ, hwy)) +
geom_point() +
facet_wrap(~class, scales = "free") +
geom_blank(data = facetlims)
您很接近,但问题是您以错误的方式指定了限制。您不应将限制指定为xlim=range(…)
。这会产生以下错误:
范围错误(c(mpg$displ,mpg$hwy))+FACTION_wrap(~类,刻度)=
“free”):二进制运算符的非数值参数
指定限制的正确方法为xlim(范围(…)
。来自ggplot2
包的mpg
数据集示例:
ggplot(mpg, aes(displ, hwy)) +
geom_point() +
xlim(range(mpg$displ)) +
ylim(range(mpg$hwy)) +
facet_wrap(~class, scales = "free")
其中:
如果要以正确的方式比较不同的面,则必须对轴使用相同的比例
上述地块的替代方案可以是:
ggplot(mpg, aes(displ, hwy)) +
geom_point(size=1) +
xlim(range(c(mpg$displ, mpg$hwy))) +
ylim(range(c(mpg$displ, mpg$hwy))) +
facet_wrap(~class, scales = "free")
其中:
对于您自己的数据集,以下两个选项之一应提供所需的结果:
ggplot(VV,aes(x=R1_Zsc,y=R2_Zsc)) +
geom_point() +
stat_smooth() +
xlim(range(VV$R1_Zsc)) +
ylim(range(VV$R2_Zsc)) +
facet_wrap(~variable, scales="free")
或:
如果只想在左侧面(y轴)和底部面(x轴)上包含轴标签,只需使用coord_fixed
删除scales=“free”,仅强制轴上数据单元的物理表示之间具有指定的比率。但是,这被facet\u wrap
中的scales=“free”
参数覆盖。查看我的答案如何解决该问题,而无需使用coord_fixed
(当两个轴的限制不太相似时,这可能会对绘图的显示产生意外后果)。谢谢,这正是我想要的。我接受了这个答案,因为它允许尺度在每个方面都是相同的,而没有尺度。我只需要消化dplyr语法,谢谢,但这不是;这正是我想要的,因为我想要x=y,但每个方面都不同,构建另一个数据框并使用geom_blank的答案就是我想要的答案。我无法添加答案,但一个非常简单的解决方案是将不可见的数据添加到绘图中,并反转x和y,以便绘图点始终为正方形,例如,+geom_blank(aes)(x=R2_-Zsc,y=R1_-Zsc))
ggplot(VV,aes(x=R1_Zsc,y=R2_Zsc)) +
geom_point() +
stat_smooth() +
xlim(range(c(VV$R1_Zsc,VV$R2_Zsc))) +
ylim(range(c(VV$R1_Zsc,VV$R2_Zsc))) +
facet_wrap(~variable, scales="free")