【问题标题】:R: Combining several lines and points in one polar plotR:在一个极坐标图中组合多条线和点
【发布时间】:2023-04-09 22:54:01
【问题描述】:

我有来自多个来源的数据来描述 360 度空间中的 y 值,但我无法将它们与拟合样条曲线一起绘制在单个极坐标图上。

这是一些模拟数据:

# Data for test
set.seed(35)
sim1 <- cbind(rnorm(6,0),seq(0,359,359/5))
sim2 <- cbind(rnorm(9,0),seq(0,359,359/8))
sim3 <- cbind(rnorm(7,0),seq(0,359,359/6))

如果不做极坐标图,我的程序如下:

# Create spline for points
total <- rbind(sim1,sim2,sim3)
fit= smooth.spline(total[,2],total[,1], cv=T)

# Classic solution if not polar plot
plot(sim1[,2],sim1[,1],ylim = c(-3,4), col = "darkgrey")
lines(sim1[,2],sim1[,1], pch=2, col = "darkgrey")
points(sim2[,2],sim2[,1], pch=2, col = "darkgrey")
lines(sim2[,2],sim2[,1], pch=2, col = "darkgrey")
points(sim3[,2],sim3[,1], pch=2, col = "darkgrey")
lines(sim3[,2],sim3[,1], pch=2, col = "darkgrey")
lines(fit, , col = "red")

这会给我这样的数字:

Plot

但试图将其绘制成极坐标图。我不能比单独绘制每个更进一步:

# Plot
library(plotrix)

polar.plot(sim1[,1],sim1[,2],lwd=3,line.col="red",  radial.lim=c(-3,3),clockwise=TRUE,rp.type = "s")
polar.plot(sim2[,1],sim2[,2],lwd=3,line.col="blue",  radial.lim=c(-3,3),clockwise=TRUE,rp.type = "s")
polar.plot(sim3[,1],sim3[,2],lwd=3,line.col="darkgrey",  radial.lim=c(-3,3),clockwise=TRUE,rp.type = "s")

Poor plot but 360

我也尝试过使用 ggplot2 以及 plotly,但没有任何结果。

【问题讨论】:

  • 啊,谢谢。它是 plotrix 库。我也会将其编辑到正文中。

标签: r plot polar-coordinates


【解决方案1】:

使用add 参数添加行。也许是这样的?

polar.plot(sim1[,1], sim1[,2], lwd=1, line.col = "grey20", radial.lim = c(-3,3), 
           clockwise = TRUE, rp.type = "p")
polar.plot(sim2[,1], sim2[,2], lwd=1, line.col = "grey20", radial.lim = c(-3,3), 
           clockwise = TRUE, rp.type = "p", add = TRUE)    
polar.plot(sim3[,1], sim3[,2], lwd=1, line.col = "grey20", radial.lim = c(-3,3), 
           clockwise = TRUE, rp.type = "p", add = TRUE)
polar.plot(fit$y, fit$x, lwd=2, line.col = "firebrick", radial.lim = c(-3,3), 
           clockwise = TRUE, rp.type = "p", add = TRUE)

【讨论】:

    【解决方案2】:

    GGplot 替代方案:

    library(ggplot2,ggthemes)
    
    # Data for test
    set.seed(35)
    sim1 <- cbind(rnorm(6,0),seq(0,359,359/5))
    sim2 <- cbind(rnorm(9,0),seq(0,359,359/8))
    sim3 <- cbind(rnorm(7,0),seq(0,359,359/6))
    
    # Create spline for points
    total <- rbind(sim1,sim2,sim3)
    
    colnames(total)=c('Col1','Col2')
    total=as.data.frame(total)
    MyNames=c(rep('sim1',nrow(sim1)),rep('sim2',nrow(sim2)),rep('sim3',nrow(sim3)))
    total=cbind(MyNames,total)
    
    Radial=ggplot(total)+
      theme_light()+
      geom_line(aes(x=Col2,y=Col1,group=MyNames,colour=MyNames),alpha=0.4)+
      geom_point(aes(x=Col2,y=Col1,group=MyNames,colour=MyNames))+
      geom_line(aes(x=Col2,y=Col1),stat='smooth', method = "loess", span=0.5, alpha=0.4, size=1.2)+
      scale_x_continuous(breaks=seq(0,360,by=60),expand=c(0,0),lim=c(0,360))+
      coord_polar(theta='x',start=0)+
      ggtitle('Sim')+
      theme(axis.text=element_text(size=14),axis.title=element_text(size=16,face="bold"),legend.text=element_text(size=14),legend.title=element_text(size=14),title=element_text(size=16,face="bold"),plot.title = element_text(hjust = 0.5))
    Radial
    

    【讨论】:

    • 非常感谢@Axeman。这几乎和我所希望的完全一样。是否可以添加样条曲线:fitval
    • 我自己的问题的一种解决方法是将“fitval”添加到“total”值并将其命名为“fit”或“mynames”值中的名称。
    • 将变量添加到“总”数据框中,使用 ggplot 时会更轻松
    猜你喜欢
    • 2014-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多