繁体   English   中英

标签的旋转遵循ggplot2中的x轴,极坐标投影?

[英]Rotation of labels to follow x-axis in ggplot2, polar projection?

如何使用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))))

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

+ 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

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

这是一个小例子,如何实现@ 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))
  ) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM