Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
2.1k views
in Technique[技术] by (71.8m points)

r - ggplot - connecting points in polar coordinates with a straight line

I am working on a similar issue, as already discussed here: r - ggplot2: connecting points in polar coordinates with a straight line

Unfortunately, the workaround is not working anymore.

I made up an example code to talk about my issue in particular. Here is what I tried last: I used geom_segment instead of geom_path and I ended up with lines going in a circle. These lines always head towards zero first and then turn according to the giving position, instead of taking the straight way.

require(grid)
require(ggplot2)
set.seed(40);
Location<-data.frame(Winkel=round(runif(1000,0,24),0))
Location$BAD <- Location$Winkel %in% c(seq(7,18))
Abschnitte<-c(0:24)
polar<-data.frame(Winkel2=c(1.5, 2.34, 1.2, 3.45, 1.67, 2.61, 1.11, 13.2), 
              value=c(0.1, 0.03, 0.02, 0.015, 0.01, 0.04, 0.09, 0.06),
              .Names=c("Winkel2", "value"))

ggplot(Location, aes(x = Winkel, fill = BAD, y=(..count..)/sum(..count..))) + 
geom_histogram(breaks = seq(0,24), colour = "black") + 
coord_polar(start = 0) + theme_minimal() +
scale_fill_brewer(type="seq",palette=3) +
ylab("Percentual allocation time") + 
ggtitle("") +
scale_x_continuous("", limits = c(0, 24), breaks = Abschnitte, labels = Abschnitte) +
scale_y_continuous(labels = scales::percent)+
geom_segment(data=polar, aes(x=0, y=0, xend=Winkel2, yend=value, fill=NA), 
           arrow=arrow(angle=30,type="closed",length=unit(0.3,"cm")))

enter image description here

Is geom_path still the better option? I tried some things with geom_path, but didn't really get towards where I wanted.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

I solved the issue myself and wanted to share my findings:

My problem was in this line:

geom_segment(data=polar, aes(x=0, y=0, xend=Winkel2, yend=value, fill=NA),

The starting point x determines the direction, in which the arrow should head to in the first place. E.g. if set to 0, all arrows will initially head towards my zero mark and turn towards their intended postion by making curves. To solve the issue, I had to set x=Winkel2, thus each arrow starts at its individual mark and goes straight to the final position:

image


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share
...