r - 在ggpot2中强制散点图网格为正方形
问题描述
我试图强制散点图的网格由正方形组成,x和y值具有不同的范围。
我试图将整个图强制为正方形(aspect.ratio=1),但这并不能解决不同范围的问题。然后我试图改变我的轴值的限制。
1)这是我首先尝试的:
p + theme(aspect.ratio = 1) +
coord_fixed(ratio=1, xlim = c(-0.050,0.050),ylim = c(-0.03,0.03))
2)我通过使用每个轴的值范围来更改比率:
p + coord_fixed(ratio=0.06/0.10, xlim = c(-0.050,0.050), ylim = c(-0.03,0.03))
3)然后我更改了y的限制以匹配x的限制:
p + theme(aspect.ratio = 1) +
coord_fixed(ratio=1, xlim = c(-0.050,0.050),ylim = c(-0.05,0.05))
1)背景上的网格由矩形组成。
2)我希望这会自动更改刻度线的位置,以便给我一个由正方形组成的网格。还是三角形。
3)它显然有效,因为我匹配了x和y的范围。但是图中有很多空白区域。
还有什么我应该尝试的吗?
提前致谢。
解决方案
如果您希望绘图是方形的并且您希望网格是方形的,您可以通过将 y 变量重新缩放为与 x 变量相同的比例(反之亦然)进行绘图,然后反转重新缩放以生成重新缩放轴的正确轴值标签。
这是一个使用mtcars
数据框的示例,我们将使用包中的rescale
函数scales
。
首先让我们创建一个mpg
vs.的图,hp
但将hp
值重新调整为与 相同的比例mpg
:
library(tidyverse)
library(scales)
theme_set(theme_bw())
p = mtcars %>%
mutate(hp.scaled = rescale(hp, to=range(mpg))) %>%
ggplot(aes(mpg, hp.scaled)) +
geom_point() +
coord_fixed() +
labs(x="mpg", y="hp")
现在我们可以反转重新缩放以生成正确的值标签hp
。我们在下面通过为 的labels
参数提供反相函数来做到这一点scale_y_continuous
:
p + scale_y_continuous(labels=function(x) rescale(x, to=range(mtcars$hp)))
但请注意,重新调整到原始hp
比例会导致不漂亮的中断。我们可以通过在刻度上生成漂亮的中断来解决这个问题,将hp
它们重新缩放到mpg
刻度以获得我们想要刻度线的位置,然后将其反转以获得标签值。但是,在这种情况下,如果我们想保持整个绘图面板为正方形,我们将不会得到方形网格:
p + scale_y_continuous(breaks = rescale(pretty_breaks(n=5)(mtcars$hp),
from=range(mtcars$hp),
to=range(mtcars$mpg)),
labels = function(x) rescale(x, from=range(mtcars$mpg), to=range(mtcars$hp)))
推荐阅读
- node.js - 仅当我使用“/”(不在其他路径中)时,Apache ProxyPass 才加载资源
- java - 使用 Selenium Java 单击聊天按钮
- javascript - 在着色器中更改矩形的大小和比例
- ios - 如何滚动cupertino选择器自动颤动?
- javascript - 将 forwardRef 与 proptypes 和 eslint 一起使用
- javac - Synology DS213 - Java 编译器
- jquery - jqPlot 没有绘制正确的图形
- sql-server - 当 2 个表具有关联 ID 时编写 MS SQL Server 查询
- geometry - Ubuntu 18.04 上的 CGAL 示例
- sockets - 有可能实现它自己的类似 TCP/UDP 的协议吗?