我有12个变量,M1,M2,...,M12,我为此计算某个统计量x.
df = data.frame(model = factor(paste("M", 1:28, sep = ""), levels=paste("M", 1:28, sep = "")), x = runif(28, 1, 1.05))
levels = seq(0.8, 1.2, 0.05)
Run Code Online (Sandbox Code Playgroud)
我想将这些数据绘制如下:

每个圆(轮廓)代表该统计量"x"的水平.三条蓝线仅代表三种不同的场景.
此示例中包含的数据框表示一个方案.对于该特定场景,蓝线将简单地加入所有模型M1至M28的值.
我尝试了以下方法:
ggplot(data=df, aes(x=model, y=x, group=1)) +
geom_line() + coord_polar() +
scale_y_continuous(limits=range(levels), breaks=levels, labels=levels) +
theme(axis.text.y = element_blank(), axis.ticks = element_blank(), axis.title.x = element_blank(), axis.title.y = element_blank())
Run Code Online (Sandbox Code Playgroud)
但是,我得到一条断开的路径(在M28和M1之间)

然后,我复制了第一行并将其放在数据框的底部(见下文),然后使用geom_path()而不是geom_line(),但我没有得到我想要的结果:
## Replicating the first row (model1) and placing it at end of dataframe
df = rbind(df, df[1,])
## using geom_path()
ggplot(data=df, aes(x=model, y=lg, group=1)) +
geom_path() + coord_polar() +
scale_y_continuous(limits=range(levels), breaks=levels, labels=levels) +
theme(axis.text.y = element_blank(), axis.ticks = element_blank(), axis.title.x = element_blank(), axis.title.y = element_blank())
Run Code Online (Sandbox Code Playgroud)

请问有什么能帮我实现我想要的结果吗?任何帮助,将不胜感激.谢谢!
您必须使用geom_polygon封闭路径:
library(ggplot2)
ggplot(data=df, aes(x=model, y=x, group=1)) +
geom_polygon(fill = NA, colour = "black") +
coord_polar() +
scale_y_continuous(limits=range(levels), breaks=levels, labels=levels) +
theme(axis.text.y = element_blank(), axis.ticks = element_blank(),
axis.title.x = element_blank(), axis.title.y = element_blank())
Run Code Online (Sandbox Code Playgroud)
