r - 与“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) 使辐条的长度相同,但使绘图不可读。有解决方法吗?
解决方案
这个图的问题是你的 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
在这个意义上是模棱两可的。
推荐阅读
- identityserver4 - 手动创建和验证 JWT 令牌
- php - WooCommerce 删除计费字段外观和验证强制字段出现
- cython - Cython:解决方法 scipy.optimize.cython_optimize.brentq 参数 ctype 以使用类方法 ctype
- javascript - 如何使用 Node.js/Express.js 和 Mongodb 计算 API 调用
- javascript - 访问状态中的元素
- python - 如何在pyspark中获取列的加权平均值
- phpstorm - PhpStorm 远程开发
- entity-framework-core - add-migration 在数据库中查询我要添加的列,失败并显示“错误:无效的列名'newColumn1'、'newColumn2'、'newColumn3'”
- linux - 用于捕获中断并通知用户代码的简单 Linux 驱动程序,无需竞争
- python - 为什么 PyAutogui 没有安装到我的电脑上?