【问题标题】:ploting an ellipse in log plot with ggplot用ggplot在对数图中绘制一个椭圆
【发布时间】:2020-03-29 18:02:04
【问题描述】:

几周前我发现了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))

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

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

我得到一个巨大的椭圆:

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

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

哪个有效:

但前提是角度为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))

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

【问题讨论】:

  • ggplot(data = mtcars,aes(hp,disp))+geom_point()+scale_y_continuous(trans = log10_trans(),breaks = c(1,10^10))+geom_ellipse(aes( x0 = 230, y0 = log10(450), a = 40, b = 12, 角度 = -10))
  • @ShirinYavari nope 这根本不起作用,它会产生一个类似于我的第二个图表的图表
  • 这个怎么样? ggplot(data = mtcars,aes(hp,disp))+geom_point()+scale_y_continuous(trans = log10_trans(),breaks = c(1,10^10))+geom_ellipse(aes(x0 = 230, y0 = log10( 450), a = log10(80), b = 30, 角度 = -10))
  • @ShirinYavari 不。请在发表评论之前尝试您的答案,如果您认为自己有解决方案,请提出解释性答案
  • 这两个问题你见过吗? stackoverflow.com/questions/2397097/…stackoverflow.com/questions/36609476/…,也许这里有一些帮助

标签: r ggplot2 data-visualization ggforce


【解决方案1】:

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

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

【讨论】:

  • 如此简单,但工作量很大。太棒了。我让这个问题打开了一小会儿,只是为了寻找其他可能的答案
猜你喜欢
  • 1970-01-01
  • 2021-01-30
  • 2017-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-10
  • 1970-01-01
相关资源
最近更新 更多