首页 > 解决方案 > ggplot polar_coord 更好地分隔文本

问题描述

我在数据框中有一些数据times.posix。由于是时间数据,我想将其可视化为圆形直方图。我的代码是这样的:

ggplot(times.posix) +
  geom_histogram(aes(x = pct.hour(dropoff.posix) ), bins = 24, color = 'black', fill = 'blue') +
  scale_x_continuous(breaks = 0:23, labels = paste( (11:(11+11) )%%12 + 1, c(rep('AM',12), rep('PM', 12) ) ) ) +
  ggtitle('Dropoff time frequency') +
  coord_polar()

我的图表最终是这样的

图片

实际的 geom_hist 最终结果很好,但它周围的文本间隔很奇怪——标签从上午 12 点开始看起来还不错,但到晚上 11 点它们已经落后了一个完整的街区。有人知道怎么修这个东西吗?

标签: rggplot2

解决方案


您的问题似乎与pct.hour功能有关。我不确定这个函数是什么,因为问题中没有包含所需的库,而且我在网上找不到任何文档。

如果您改为使用lubridate::hour,问题似乎消失了:

ggplot(times.posix) +
  geom_histogram(aes(x = lubridate::hour(dropoff.posix)), 
                 bins = 24, 
                 color = 'black', 
                 fill = 'blue') +
  scale_x_continuous(breaks = 0:23, 
                     labels = paste((11:(22)) %% 12 + 1, c(rep('AM', 12), rep('PM', 12)))) +
  ggtitle('Dropoff time frequency') +
  coord_polar()

在此处输入图像描述

但是,如果 x 的任何值为 24,我可以复制您不想要的图,例如:

geom_histogram(aes(x = lubridate::hour(dropoff.posix) * 24/23))

在此处输入图像描述

所以我的猜测是,如果你这样做,max(pct.hour(times.posix$dropoff.posix))你会得到 24,什么时候应该是 23。如果你让我们知道pct.hour()函数是什么,也许我们可以帮助找出问题的真正所在。


使用的数据

set.seed(69)
times.posix <- data.frame(dropoff.posix = as.POSIXct("2020-03-13") + 60 * runif(500,0,1440))

推荐阅读