在ggplot2中,
我的问题是:
是否存在一种方法来结合
这是一个常见的问题,但通常的答案是不正确的: 常见的建议是使用
我怀疑这是ggplot2目前没有的功能。但更重要的是,我认为应该记录正确的解决方案或至少回答这个问题。下面是一个快速的最小示例:
coord_fixed()
坐标系可以确保数据的纵横比保持在给定值。因此,面板的形状会发生变化以保持数据的形状。同时,coord_flip()
交换绘图的轴。然而,在ggplot2中,一个绘图必须有且仅有一个坐标系,所以这些函数不能组合使用。我的问题是:
是否存在一种方法来结合
coord_fixed()
和coord_flip()
的行为,从而得到一个交换了x和y轴并且具有固定数据纵横比的坐标系?这是一个常见的问题,但通常的答案是不正确的: 常见的建议是使用
coord_flip()
结合theme(aspect.ratio = 1)
代替coord_fixed()
。然而,根据ggplot2文档,这个设置是指“面板的宽高比”。因此,为了保持面板的形状,数据将改变形状。我怀疑这是ggplot2目前没有的功能。但更重要的是,我认为应该记录正确的解决方案或至少回答这个问题。下面是一个快速的最小示例:
library(ggplot2)
x <- 1:100; data <- data.frame(x = x, y = x * 2)
p <- ggplot(data, aes(x, y)) + geom_point()
p # by default panel and data both fit to device window
p + coord_fixed() # panel changes shape to maintain shape of data
p + theme(aspect.ratio = 1) # data changes shape to maintain shape of panel
p + coord_fixed() + coord_flip() # coord_flip() overwrites coord_fixed()
# popular suggested answer does not maintain aspect ratio of data:
p + coord_flip() + theme(aspect.ratio = 1)