R 强制ggplot2散点图为方形
我可以使用R 强制ggplot2散点图为方形,r,ggplot2,scatter-plot,R,Ggplot2,Scatter Plot,我可以使用xlim()和ylim()强制ggplot2散点图为方形,具有相同的x和y比例,但它需要手动计算限制。还有更方便的方法吗 所谓方形,我指的是两个要求: x轴和y轴上的比例相同 x轴和y轴的等长 如果要使距离比例点相同,请使用: p可能是你今天看到的最丑陋的代码,但它确实做到了 可以从ggplot\u build访问x轴和y轴的范围: r<-max(abs(ggplot_build(your_plot)$panel$ranges[[1]]$x.range)) s<-max(a
xlim()
和ylim()
强制ggplot2散点图为方形,具有相同的x和y比例,但它需要手动计算限制。还有更方便的方法吗
所谓方形,我指的是两个要求:
如果要使距离比例点相同,请使用:
p可能是你今天看到的最丑陋的代码,但它确实做到了
可以从ggplot\u build
访问x轴和y轴的范围:
r<-max(abs(ggplot_build(your_plot)$panel$ranges[[1]]$x.range))
s<-max(abs(ggplot_build(your_plot)$panel$ranges[[1]]$y.range))
t<-round(max(r,s),1)
your_plot<-your_plot+coord_equal(xlim=c(-t,t),ylim=c(-t,t))
r注:对于方形(不考虑绘制的数据)
RAMON的回答,这个函数对我来说很好,我认为它不是丑陋的,因为它可以隐藏函数定义…
squarePlot <- function(plt){
return(plt+coord_equal()+
expand_limits(x=ggplot_build(plt)$panel$ranges[[1]]$y.range,
y=ggplot_build(plt)$panel$ranges[[1]]$x.range))
}
squarePlot前面答案中提供的所有解决方案都不适用于我的R版本:R版本3.6.1
ggplot_build(pot)$panel$ranges[[1]]$x.range # return NULL value
@Gerhard Burger在我的案例中提到的解决方案:
r<-max(abs(layer_scales(plt)$x$range$range))
s<-max(abs(layer_scales(plt)$y$range$range))
t<-round(max(r,s),1)
plt<-plt+coord_equal(xlim=c(0,t),ylim=c(0,t))
rBy“方形”您的意思是希望x
方向上一个单位的长度与y
方向上的长度相同(意思是如果x
从0变为5,y
从0变为6,y
尺寸将变长一个单位),或者你的意思是希望整个x轴的长度与y轴的长度相同(因此在上一个示例中,y
的每个单位都比x
的每个单位短,但整个图形看起来是方形的)?@baptiste:我认为你应该将此作为一个答案。在基本绘图中,它似乎与asp=1
类似。@DWin似乎没有一个建议的答案使绘图呈方形,它们都使x和y比例相同。如果形状重要,请使用主题(纵横比=1)
,但要回答您的问题,我认为在ggplot2中没有这样做的功能。您可以使用扩展\u限制
,但我相信您必须以某种方式手动计算数据的最小值和最大值。感谢您,它使x轴和y轴具有相同的比例,但不会强制绘图为方形-即x轴和y轴的长度可能与此想法不同,但这对我的ggplot对象不起作用。我得到的最接近的是内部ggplot\u build(qq)$plot$scales$scales
,但它仍然不起作用。因此,我最终手动计算极限并按1.3的比例缩放。ggplot\u build
一直在变化,我认为目前是首选的方法。这迫使绘图背景区域为正方形,而不是(必然)绘图数据区域。此外,ggsave
可能不会(几乎肯定不会)输出方形图像,但会将其填充为白色,这样,如果背景颜色为白色,则保存的图形将不会显示为方形(如果背景为彩色,则会被白色填充包围)。根据您的目的,此选项应与其他选项一起使用。您可以随时调整ggsave
中的width
和height
选项。
ggplot_build(pot)$panel$ranges[[1]]$x.range # return NULL value
r<-max(abs(layer_scales(plt)$x$range$range))
s<-max(abs(layer_scales(plt)$y$range$range))
t<-round(max(r,s),1)
plt<-plt+coord_equal(xlim=c(0,t),ylim=c(0,t))