与coord_polar()
一起使用geom_col()
时遇到问题。我的学位数值范围从0到<360。假设步长为20,所以0, 20, 40... 340
。如果我用coord_polar()
绘制它们,则会遇到两个问题:
请参阅此最小示例。
suppressWarnings(library(ggplot2))
df <- data.frame(x = seq(0,359,20),y = 1)
ninety = c(0,90,180,270)
p <- ggplot(df, aes(x,y)) +
geom_col(colour = "black",fill = "grey") +
geom_label(aes(label = x)) +
scale_x_continuous(breaks = ninety) +
geom_vline(xintercept = ninety, colour = "red") +
coord_polar()
p
如果我设置了x轴限制,则坐标系的旋转是正确的,但由于空间不足,列0消失了。
p+scale_x_continuous(breaks = c(0,90,180,270),limits = c(0,360))
#> Scale for 'x' is already present. Adding another scale for 'x', which
#> will replace the existing scale.
#> Warning: Removed 1 rows containing missing values (geom_col).
由reprex package(v0.2.1)于2019-05-15创建
答案 0 :(得分:2)
由于每个条形图占据的空间为20度,因此您可以在比例尺和坐标上将其移动一半:
ggplot(df, aes(x,y)) +
geom_col(colour = "black",fill = "grey") +
geom_label(aes(label = x)) +
scale_x_continuous(breaks = ninety,
limits = c(-10, 350)) + # shift limits by 10 degrees
geom_vline(xintercept = ninety, colour = "red") +
coord_polar(start = -10/360*2*pi) # offset by 10 degrees (converted to radians)
答案 1 :(得分:1)
我已经更接近您想要的东西了,但这有点麻烦,所以我不知道这是否是一个很好的解决方案。
代码:
df <- data.frame(x = seq(0,359,20),y = 1)
ggplot(df, aes(x+10,y, hjust=1)) +
geom_col(colour = "black",fill = "grey") +
geom_label(aes(x=x+5,label = x)) +
scale_x_continuous(breaks = c(0,90,180,270),limits = c(0,360)) +
coord_polar()
我现在将它们绘制在c(10,30,50,...)上,而不是将geom_cols绘制在c(0,20,40,...)上。我正在将geom_labels绘制在c(5,15,25,...)。
由于180度不是南,标签在图表底部的位置仍然不理想。