使用 ggplot 在对数图中绘制椭圆

den*_*nis 5 r data-visualization ggplot2 ggforce

几周前我发现ggforce,它有一个很好的绘制椭圆的功能。但我无法在日志图中使用它。下面是一个例子:

我想用椭圆圈出这个组

library(ggforce)
library(ggplot2)

ggplot(mtcars)+
  geom_point(aes(hp,disp))+
  geom_ellipse(aes(x0 = 230, y0 = 450, a = 80, b = 30, angle = -10))
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

但我想在对数图中这样做。如果我天真地做

ggplot(mtcars)+
  geom_point(aes(hp,disp))+
  geom_ellipse(aes(x0 = 230, y0 = 450, a = 80, b = 30, angle = -10))+
  scale_y_log10()
Run Code Online (Sandbox Code Playgroud)

我得到一个巨大的椭圆:

在此处输入图片说明

看起来椭圆参数没有对数转换。我可以尝试减少参数轴以获得对数轴上的合适大小,例如:

ggplot(mtcars)+
  geom_point(aes(hp,disp))+
  scale_y_log10()+
  geom_ellipse(aes(x0 = 230, y0 = 450, a = 80, b = 0.05, angle =0))
Run Code Online (Sandbox Code Playgroud)

哪个有效:

在此处输入图片说明

但只有当角度为0时,如果不是,两个wxis是混合的,我无法得到我想要的椭圆:

ggplot(mtcars)+
  geom_point(aes(hp,disp))+
  scale_y_log10()+
  geom_ellipse(aes(x0 = 230, y0 = 450, a = 80, b = 0.05, angle = -10))
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

如何在 ggplot 的 log 或 log-log plot 中绘制椭圆?是否有任何可行的解决方法ggforce?有没有其他“简单”的解决方案(除了在半对数坐标中编码椭圆)?

lib*_*orm 6

实际上对我有用的是转换坐标系而不是 y 比例。

ggplot(mtcars) +
  geom_point(aes(hp,disp)) +
  geom_ellipse(aes(x0 = 230, y0 = 450, a = 80, b = 30, angle = -10)) +
  coord_trans(y = "log10")
Run Code Online (Sandbox Code Playgroud)

用变换的坐标系绘图

老实说,使用坐标变换对我来说直观上是有意义的——它类似于coord_map你在绘制不同形状的多边形时也变换坐标的地方——但我不知道足够的内部原理来解释为什么缩放变换不起作用。