【问题标题】:Consistent radius with `geom_spoke` in `ggplot2`与“ggplot2”中的“geom_spoke”半径一致
【发布时间】:2021-05-28 19:58:57
【问题描述】:

使用 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) 使辐条的长度相同,但使绘图不可读。有解决办法吗?

【问题讨论】:

    标签: r ggplot2 plot visualization


    【解决方案1】:

    这个图的问题是你的 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= 必须被解释为相对于轴之一。现在应该很明显,从 X 角度来看,0.5 的半径似乎没问题,但从 Y 角度来看则不行,所以radius=0.5 在这个意义上是不明确

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多