如何在coord_polar graph ggplot中添加y轴标签?

wwtsj6pe  于 2023-04-03  发布在  其他
关注(0)|答案(2)|浏览(110)

我想用geom_pointcoord_polar图中自动添加y轴标签。下面是一个可重复的示例:

library(ggplot2)
ggplot(mtcars, aes(x = hp, y = mpg, color = factor(am))) +
  geom_point() +
  coord_polar() +
  labs(color = 'am')

创建于2022-10-31使用reprex v2.0.2
这里你可以看到y轴标签在侧面,但我希望它们在极坐标图内。我知道你可以像这样使用annotate

library(ggplot2)
ggplot(mtcars, aes(x = hp, y = mpg, color = factor(am))) +
  geom_point() +
  coord_polar() +
  labs(color = 'am') +
  annotate('text', x = 0, y = c(15, 20, 25, 30), label = c('15', '20', '25', '30'))

创建于2022年10月31日,使用reprex v2.0.2
但是这不是很自动化,所以我想知道是否有一种自动的方法可以像上面那样在coord_polar图中添加y轴标签?

zphenhs4

zphenhs41#

让你开始:您可以提取中断并应用这些中断以使其至少“半自动”:

library(ggplot2)
p1 <- ggplot(mtcars, aes(x = hp, y = mpg, color = factor(am))) 
brk <- ggplot_build(p1)$layout$panel_params[[1]]$y$breaks
brk <- brk[-c(1, length(brk))]

ggplot(mtcars, aes(x = hp, y = mpg, color = factor(am))) +
  geom_point() +
  coord_polar() +
  labs(color = 'am') +
  theme(axis.ticks.y=element_blank(),
      axis.text.y=element_blank())+
  annotate('text', x = 0, y = brk, label = as.character(brk))

创建于2022-10-31使用reprex v2.0.2

hc2pp10m

hc2pp10m2#

在user 12728748的答案的基础上,您还可以使用ggplot自己的scales::extended_breaks方法直接计算中断。
注意:对于极坐标,计算的间断点的限制似乎被丢弃。这似乎类似于间断点与guide_legend函数一起用于连续数据时的行为(另请参见:How does ggplot calculate its default breaks?).我不知道这到底发生在哪里-but maybe someone knows an answer to this question.

library(ggplot2)
my_breaks <- scales::extended_breaks()(mtcars$mpg)
my_breaks <- my_breaks[2:(length(my_breaks)-1)] ## in polar coordinates, the limits of the breaks are not used

ggplot(mtcars, aes(x = hp, y = mpg, color = factor(am))) +
  geom_point() +
  coord_polar() +
  labs(color = 'am') +
  annotate('text', x = 0, y = my_breaks, label = my_breaks, size = 9*5/14) +
  theme(axis.text.y = element_blank(), 
        axis.ticks.y = element_blank())

创建于2023-04-01使用reprex v2.0.2

相关问题