1

I have a circle plot like this:

  dat <- data.frame(time = factor(rep(0:23,times = 20)),
                 count = sample(200,size = 480,replace = TRUE),
                 grp = sample(LETTERS[1:3],480,replace = TRUE))

ggplot(data = dat,aes(x = time,y  = count,fill = grp)) + 
    geom_bar(stat = "identity",position = "stack") + 
    coord_polar()

How can I make the y axis to be the radius of the circle and have this prices?

Like this: enter image description here

4

1 回答 1

4

如果您更改geom_bar()geom_line()更改aes()呼叫,您将获得所需的情节:

# set up the plotting environment
require('ggplot2')
theme_bw(base_size = 8, base_family = "")
# now generate the plot
p <- ggplot(data = dat,
            aes(x = time,
                y  = count,
                color = grp)) +    
    geom_line() + 
    coord_polar()

print(p)

这给了你这个:

在此处输入图像描述

目前看起来有点奇怪,因为您的时间数据只包括小时数。如果您有十进制小时数,您可能会看到更多信息。

下一步是通过为新标签找出好的标签来修复轴标签,在 y 轴上设置中断,使用 伪造新的刻度标签geom_text()并使用 杀死旧标签和刻度theme()

ybreaks <- pretty(x = data$count, n = 5)
p <- ggplot(data = data,
            aes(x = time, y  = count, color = grp)) + 
  geom_path() + 
  coord_polar() +
  scale_y_continuous(breaks = ybreaks) + 
  geom_text(data = data.frame(x = 0, y = ybreaks, label = ybreaks),
            aes(x = x, y = y, label = label),
            inherit.aes = F,
            size = 2) +
  theme(axis.text.y = element_blank(),
        axis.ticks.y = element_line(size = 0))
print(p)

现在你有了你的情节:

在此处输入图像描述

使用pretty()在 y 轴上设置中断和标签的优点是轴标签会根据绘制的数据自动更改,并与网格线对齐。

你有一些摆弄来整理字体大小,但你大部分时间都在那里。有关如何执行此操作的详细信息,请查看ggplot2 文档

于 2013-08-31T15:51:32.943 回答