r - 在 ggplot2 中使用 coord_flip() 和 facet_wrap(scales = "free_y") 似乎会给出意外的面轴刻度线和刻度标签

标签 r ggplot2

我正在尝试创建一个具有翻转坐标的多面图,其中一个且仅一个轴允许针对每个面而变化:

require(ggplot2)
p <- qplot(displ, hwy, data = mpg)
p + facet_wrap(~ cyl, scales = "free_y") + coord_flip()

enter image description here

这个图对我来说并不令人满意,因为每个图都重复了错误的刻度线和刻度标签。我希望每个水平轴上都有刻度线,而不是每个垂直轴上的刻度线。

这是意外的行为,因为该图暗示顶部面板的水平轴刻度线与底部面板的水平轴刻度线相同,但事实并非如此。要查看此运行:

p <- qplot(displ, hwy, data = mpg)
p + facet_wrap(~ cyl, scales = "fixed") + coord_flip()

所以我的问题是:有没有办法删除右侧面的垂直轴刻度线并在顶部面添加水平轴刻度线和标签?

正如 Paul 在下面深刻指出的那样,我给出的示例可以通过在 qplot() 中交换 x 和 y 并避免使用 coord_flip() 来解决,但这并不适用于所有几何图形,例如,如果我想要一个水平多面条我可以运行带有自由水平轴的绘图:

c <- ggplot(diamonds, aes(clarity, fill=cut)) + geom_bar()
c + facet_wrap(~cut, scales = "free_y") + coord_flip()

image

这些面具有可变的水平轴,但具有重复的垂直轴刻度线,而不是重复的水平轴刻度线。我认为保罗的技巧在这里不起作用,因为与散点图不同,条形图不是旋转对称的。

我非常有兴趣听到任何部分或完整的解决方案。

最佳答案

coord_flipfacet_wrap结合使用就是问题所在。首先,将某个轴定义为自由轴(x 轴),然后交换该轴,使 y 轴自由。目前,这在 ggplot2 中还没有很好地重现。

在您的第一个示例中,我建议不要使用coord_flip,而只是在对qplot的调用中交换变量,并使用free_x >:

p <- qplot(hwy, displ, data = mpg)
p + facet_wrap(~ cyl, scales = "free_x")

enter image description here

关于r - 在 ggplot2 中使用 coord_flip() 和 facet_wrap(scales = "free_y") 似乎会给出意外的面轴刻度线和刻度标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12560858/

相关文章:

r - 在 R 中逐行阅读的好方法是什么?

具有不同列长度的 R 数据框

mysql - RMySQL:as.character.default() 错误:

r - 如何将我的图例组织成子组?

r - ggplot改变大小和颜色

r - 为什么 lubridate::ymd_hms 不适用于非常特定的日期时间?

r - 如何从 DRAT 文件的 gh-pages 获取下载统计信息/分析

r - 对数刻度图中的误差线?

R,ggplot2,在主题演讲中按顺序介绍图形元素

r - 为什么 geom_sf 不允许填充数据帧中的离散列?