Roland
Roland

Reputation: 71

ggplot2 v2.21.9 sec.axis in polar plot

I am currently trying to add a secondary axis using the recently introduced function sec.axis in ggplot2. This function works well with scatter/bar plots, but not for polar plot: In the following code, the name for the second y-axis appears, but not the axis.

Is there any workaround or option, that I have not figured out?

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

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,
           sec.axis = sec_axis(~.*5, name = "mean direction")) +
  geom_segment(data = polar, aes(x = Winkel2, y = 0, xend = Winkel2, yend = value, fill = NA), 
               arrow = arrow(angle = 30, type = "closed", length = unit(0.3, "cm")))

enter image description here

Upvotes: 1

Views: 569

Answers (1)

Dylan
Dylan

Reputation: 815

As @henrik mentioned in the comments, this is a bug. It's been patched and is available if you use the development version from GitHub (i.e., devtools::install_github("tidyverse/ggplot2")).

Here's the example after the patch:

require(ggplot2)
#> Loading required package: 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))

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,
           sec.axis = sec_axis(~.*5, name = "mean direction")) +
  geom_segment(data = polar, aes(x = Winkel2, y = 0, xend = Winkel2, yend = value, fill = NA), 
               arrow = arrow(angle = 30, type = "closed", length = unit(0.3, "cm")))
#> Warning: Ignoring unknown aesthetics: fill

Upvotes: 1

Related Questions