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?有没有其他“简单”的解决方案(除了在半对数坐标中编码椭圆)?
实际上对我有用的是转换坐标系而不是 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你在绘制不同形状的多边形时也变换坐标的地方——但我不知道足够的内部原理来解释为什么缩放变换不起作用。