我想创建一个得分情节,就像你经常在角色扮演游戏中看到的那样,使用ggplot得分为正数和负数。
要做到这一点,我使用geom_col
和coord_polar
。问题是条形不是矩形而是梯形,正如预期的那样,因为整个绘图空间坐标系变形了。
是否可以对此进行调整以获得适当的均匀条形(并在图形的中心添加一些空间以避免重叠)?
奖励请求:根据x轴上的值的数量,是否可以使用多边形网格而不是圆形网格?
您可以使用线段而不是条形。然后厚度取决于您选择的尺寸,而不是坐标系:
# sample dataset
set.seed(333)
n.dim = 9
df <- data.frame(
x = paste("attribute", seq(1, n.dim), sep = "."),
score = rnorm(n.dim)
)
ggplot(df,
aes(x = x, y = score,
xend = x, yend = 0,
col = score >= 0)) +
geom_segment(size = 15) + # adjust size for different bar thickness
scale_y_continuous(expand = c(0.1, 0)) + # increase space at plot centre
coord_polar() +
theme_minimal() +
theme(legend.position = "none",
axis.title = element_blank(),
axis.text.y = element_blank(),
panel.grid.major.x = element_blank())
我认为多边形网格(而不是圆形网格)将更难以解释,因为距离绘图中心的距离不再与y轴值具有一对一的关系。 (见下图)在ggplot中可能会破解类似于多边形网格的东西,但我自己还没有看到任何这样的实现。