3

我正在尝试使用以下数据创建漂亮的(!)极坐标图。

gr1 <- c(0, 5, 15, 20, 30, 40)
gr3 <- c(0, 5, 10, 25, 40, 60, 80)
gr2 <- c(0, 15, 25, 30, 40)

df2<- data.frame (pos = c(gr1, gr2, gr3), group = c(rep(1, length(gr1)),
 rep(2, length(gr1)), rep(2, length(gr1))))



inner circle segment to mark
                   first tier, group 1, between 15, 20
                               group 3, between 5, 10
                                        between  40 to 60 
                   second tier, group 1, between 15, 20
                               group 3, between 5, 10
                                        between 10, 25
                                        between  40 to 60 

两个位置之间的间隔两条线之间的角度。

我的真实数据中有两层以上要绘制。

标记可能是段或其他标记,例如填充颜色。

如果可能,可以对不同的组进行颜色编码。

在此处输入图像描述

带圆形标记的替代方案(首选)

在此处输入图像描述

我用ggplot2试过了。

cx <- ggplot(df2, aes(x = pos, group = group) +   geom_bar(width = 1, colour = "black"))
Error in aes(x = pos, group = group) + geom_bar(width = 1, colour = "black") :
  non-numeric argument to binary operator
cx + coord_polar()

更多试验:

df2$cpos <- cumsum (df2$pos)
cx <- ggplot(df2, aes(x = cpos, group = group) +   geom_bar(width = 1, colour = "black"))

编辑1:

我想我可能很难解释这个问题。这是带有解释的图。 在此处输入图像描述

pos(位置)是一个连续的刻度,极坐标的角度应该取决于位置值的位置。一组完成后它将重新启动。我做了一个技巧来完成这个技巧(我可能错了)。

编辑2:

以下答案为这个问题开启了更多思考。这是改进的版本,但颜色管理不起作用。

df2$cpos <- cumsum (df2$pos)
df2$y <- rep(3, length (df2$cpos))
cx <- ggplot(df2, aes(y = y, x = cpos))
cx + geom_bar(aes(stat = "identity",fill="yellow", colour = "yellow" )) + 
geom_point(aes(color = factor(group)), pch = 18, size = 2) + coord_polar() +
 scale_fill_manual(values=c("#CC6666", "#9999CC", "#66CC99"))+ ylim(0,3)

在此处输入图像描述

当我尝试设置 ylim (2,3) 以使它们看起来像不能正常工作的段时。

Error in data$y[data$y == -Inf] <- range$y.range[1] : 
  replacement has length zero
4

1 回答 1

5

我很难理解你想做什么(条形图计算频率,你可能知道)。但是,这是一种将组分配为颜色的方法:

gr1 <- c(0, 5, 15, 20, 30, 40)
gr3 <- c(0, 5, 10, 25, 40, 60, 80)
gr2 <- c(0, 15, 25, 30, 40)

df2<- data.frame (pos = c(gr1, gr2, gr3), group = c(rep(1, length(gr1)),
 rep(2, length(gr2)), rep(3, length(gr3))))
df2$cpos <- cumsum (df2$pos)

cx <- ggplot(df2, aes(fill = factor(group), x = cpos))

cx + geom_bar(width = 1, colour = "black", position = "dodge")  + coord_polar()

在此处输入图像描述

如果您想获取 pos 作为频率,请melt()使用reshape2.

如果您想像示例中那样使用点,那么以下方法可以工作吗?

cx <- ggplot(df2, aes(y = group, x = cpos))

cx + geom_point(aes(color = factor(group))) + coord_polar() + ylim(0,3)

无论如何,你看到模式了吗?使用 x 轴作为角度,y 轴作为与中间的距离,使用法线坐标绘制图,然后将其转换为极坐标。

在此处输入图像描述

回答编辑2

我仍然想知道你是否可以制作一个更有意义的情节,但也许你有理由这样做。这是一个更接近您的示例的图。它并不完美。也许大师们明天到达办公室后会给你一个更好的建议。同时,您可以从该胎面的链接中查找更多规格。

library(ggplot2)

gr1 <- c(0, 5, 15, 20, 30, 40)
gr3 <- c(0, 5, 10, 25, 40, 60, 80)
gr2 <- c(0, 15, 25, 30, 40)

df2<- data.frame (pos = c(gr1, gr2, gr3), group = c(rep(1, length(gr1)),
 rep(2, length(gr2)), rep(3, length(gr3))), y  = c(rep(1, length(gr1)),
 rep(2, length(gr1)), rep(2, length(gr1))))

df2$cpos <- cumsum (df2$pos)

cx <- ggplot(df2, aes(y = y, x = cpos))
cx + geom_point(aes(color = factor(group)), size = 4) + geom_line(aes(x = c(0,500), y = c(1)), color = "yellow") + 
geom_line(aes(x = c(0,500), y = c(2)), color = "blue") + scale_y_continuous(limits=c(0,2), breaks = c(0,1,2)) +
scale_x_continuous(labels = df2$pos, breaks = df2$cpos, limits = c(0,500)) + coord_polar() +
opts(panel.grid.major = theme_line(colour = "grey"), 
panel.grid.minor = theme_line(colour = "grey", linetype = "dashed"), 
panel.background = theme_rect(colour = "white"))

在此处输入图像描述

于 2012-05-06T11:52:08.700 回答