Ali*_*Ali 41 r scatter-plot ggplot2
我可以强制GGPLOT2散点图被方形具有相同的x和使用y缩放比例xlim()和ylim(),但它需要的限制人工计算.有没有更方便的方法呢?
方形我指的是两个要求:
mys*_*mys 50
如果要使距离比例相同,则使用coord_fixed():
p <- ggplot(...)
p <- p + coord_fixed() # ratio parameter defaults to 1 i.e. y / x = 1
Run Code Online (Sandbox Code Playgroud)
如果要确保结果图是方形的,那么您还需要指定x和y限制相同(或至少具有相同的范围).xlim并且ylim都是参数coord_fixed.所以你可以使用这些参数手动完成.或者您可以使用函数从数据中提取限制.
bap*_*ste 36
注意:对于方形(无论绘制的数据如何),
ggplot() + theme(aspect.ratio=1)
Run Code Online (Sandbox Code Playgroud)
可能是你今天看到的最丑陋的代码,但它可以解决问题.
x轴和y轴的范围可从ggplot_build以下位置访问:
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))
Run Code Online (Sandbox Code Playgroud)
小智 6
虽然是一篇较旧的文章,但对我来说,这仍然是谷歌上的热门文章。
包中的这个函数tune现在似乎可以完成此任务:
p <-
mtcars %>%
ggplot(aes(drat, wt)) +
geom_abline(slope = 1, intercept = 0) +
geom_point()
p
Run Code Online (Sandbox Code Playgroud)
p + tune::coord_obs_pred()
Run Code Online (Sandbox Code Playgroud)
前面的答案中提供的所有解决方案都不适用于我的 R 版本:R 版本 3.6.1。
ggplot_build(pot)$panel$ranges[[1]]$x.range # return NULL value
Run Code Online (Sandbox Code Playgroud)
@Gerhard Burger 在链接的 URL中提到的解决方案适用于我的情况:
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))
Run Code Online (Sandbox Code Playgroud)