3

使用 ggplot 中的 coor_polar 投影,x 轴标签的角度如何遵循与外部 x 轴相同的角度?这类似于使用 coord_polar() 时在 ggplot2 中旋转 x 轴文本,但我对数学的理解不够好,无法适应它。我在这类作品下面找到了一个反复试验的解决方案,其中angle = c(c(1:3)*c(-14,-22.3,-22),-90,c(3:1)*c(22,22.3,14),c(1:3)*c(-14,-22.3,-22),90,c(3:1)*c(22,22.3,14)). x 轴标签也可以一直沿相同方向旋转。如果一切都失败了,我可能会放弃旋转标签而只添加第二个图例,如极地 ggplot 的两个图例(自定义一个)。谢谢您的帮助!

require(ggplot2)    
df.test <- data.frame(Names=c("name01", "name02", "name03", "name04", "name05", "name06",    "name07", "name08", "name09", "name10", "name11", "name12", "name13", "name14"),Values=rep(1,24))
p <- ggplot(df.test, aes(Names, fill=Values))
p + coord_polar(theta="x", direction=1) +
geom_bar(stat="bin", colour="gray", alpha=.7) +
theme(axis.text.x = element_text(angle = c(c(1:3)*c(-14,-22.3,-22),-90,c(3:1)*c(22,22.3,14),c(1:3)*c(-14,-22.3,-22),90,c(3:1)*c(22,22.3,14))))
4

2 回答 2

6

我不太清楚你的目标是什么,但看看这是否回答了这个问题:

+ theme(axis.text.x = element_text(angle = 
            360/(2*pi)*rev( seq( pi/14, 2*pi-pi/14, len=14))))

这将使名称与拆分“相切”。如果您希望它们“垂直”(如链接答案中的插图),您只需将 pi/2 弧度添加到角度。(我们不是都在高中学习几何吗?)

+ theme(axis.text.x = element_text(angle = 
            360/(2*pi)*rev( pi/2 + seq( pi/14, 2*pi-pi/14, len=14))))

(顺便说一句:您指定的数据参数有错误。我将“24”更改为“14”。)

让我知道前 7 个标签是否正确,但您希望图中 LHS 上的标签翻转。 在此处输入图像描述

因此,您希望底部 6 旋转 pi 弧度(=pi*360/2*pi 度):

+theme(axis.text.x = element_text(angle = 360/(2*pi)*rev( 
                                             seq(pi/14,2*pi-pi/14, len=14))+
  360/(2*pi)*c( rep(0, 4),rep(pi,6), rep(0,4)) )) 
                # the rotation "back" of the lower items

(我真的不明白使用度数而不是弧度的决定。)

于 2013-10-18T02:14:14.893 回答
1

这是一个如何实现@42- 解决方案的小例子。本来对我有用的。

mtcars$gear <- factor(mtcars$gear)
mtcars$cyl <- factor(mtcars$cyl)

ax <- length(unique(mtcars$gear))

ggplot(mtcars, aes(x = gear, y = cyl)) +
  geom_point() +
  coord_polar() +
  theme(
    axis.text.x = element_text(
      angle = 360/(2*pi)*rev(seq(pi/ax,2*pi-pi/ax, len=ax)) + 360/(2*pi)*c(rep(0, round(ax/3)),rep(pi,ax-2*round(ax/3)), rep(0,round(ax/3)))
    )
  ) +
  scale_y_discrete(
    breaks = levels(mtcars$cyl),
    limits = c(" ", levels(mtcars$cyl))
  ) 
于 2016-03-20T01:13:04.603 回答