首页 > 解决方案 > 与“ggplot2”中的“geom_spoke”半径一致

问题描述

使用 geom_spoke 绘图时,当 x 和 y 轴的范围差异很大时,辐条的半径在各个角度上并不均匀。

df <- expand.grid(x = 1:10, y=seq(10, 100, by=10))
df$angle <- seq(from=-pi, to=pi, length.out=10)

ggplot(df, aes(x, y)) +
  geom_point() +
  geom_spoke(aes(angle = angle), radius = 0.5) 

在此处输入图像描述 如何确保辐条的绘制长度与角度无关?

df <- expand.grid(x = 1:10, y=seq(10, 100, by=10))
df$angle <- seq(from=-pi, to=pi, length.out=10)

ggplot(df, aes(x, y)) +
  geom_point() +
  geom_spoke(aes(angle = angle), radius = 0.5) + 
  coord_equal(ratio=1)

使用 coord_equal(ratio=1) 使辐条的长度相同,但使绘图不可读。有解决方法吗?

在此处输入图像描述

标签: rggplot2plotvisualization

解决方案


这个图的问题是你的 Y 轴是 X 轴比例的 10 倍。

您可以将 y 轴更改为相同的比例:

ggplot(df, aes(x, y/10)) +
  geom_point() +
  geom_spoke(aes(angle = angle), radius = 0.5) + 
  coord_equal(ratio=1)

在此处输入图像描述

如果您无法更改 y 轴刻度(这不足为奇),那么您可能会被困在使用sin/cos在数据上生成自己的半径。并且由于您关心所有值的统一半径大小angle,因此您需要控制相对的 x/y 范围/轴比例。

我觉得这不是最好的真棒/直观的解决方案,tbh,但从另一个角度来看它:开发人员。如果您希望辐条的半径无论角度如何都保持不变,那么radius=您提供的0.5必须被解释为相对于其中一个轴。现在应该很明显,从 X 角度来看,0.5 的半径似乎是可以的,但从 Y 角度来看却不是,所以radius=0.5在这个意义上是模棱两可的。


推荐阅读