我有一个这样的圆圈图:
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()
如何使y轴成为圆的半径并具有此价格?
像这样:
答案 0 :(得分: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()
伪造新的标签标签并使用{{杀死旧标签和标记1}}。
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)
设置断点和y轴上的标签的优点是轴标签会根据绘制的数据自动更改,并与网格线对齐。
你有一些摆弄来解决字体大小,但你大部分都在那里。有关如何执行此操作的详细信息,请查看the ggplot2 documentation。