簡體   English   中英

R:在一個極坐標圖中組合多條線和點

[英]R: Combining several lines and points in one polar plot

我有來自多個來源的數據,這些數據描述了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
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")

情節差但360

我也嘗試過使用ggplot2以及plotly,但是沒有產生我想要的結果。

使用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)

在此處輸入圖片說明

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

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM