用ggplot在对数图中绘制椭圆

时间:2019-12-04 20:43:09

标签: r ggplot2 data-visualization 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))

enter image description here

但我想在对数图中执行此操作。如果我天真地做

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

我得到一个巨大的椭圆形:

enter image description here

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

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

有效:

enter image description here

但是仅当角度为0时。否则,两个wxi混合并且我无法获得想要的椭圆:

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

enter image description here

如何在ggplot的对数或对数对数图中绘制椭圆? ggforce有任何可行的解决方法吗?

1 个答案:

答案 0 :(得分:5)

实际上对我有用的是变换坐标系而不是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")

plot with transformed coordinate system

说实话,使用Coord变换对我来说很直观-它类似于coord_map,在绘制不同形状的多边形时,您也在变换坐标-但是我不了解足够的内部解释为什么比例转换不起作用。