Ggplot2 :ordin_polar () с geom_col () - PullRequest
0 голосов
/ 15 мая 2019

У меня проблема при использовании coord_polar() вместе с geom_col(). У меня есть значения в диапазоне от 0 до <360. Допустим, есть шаги по 20, поэтому <code>0, 20, 40... 340. Если я нанесу их с coord_polar(), у меня есть две проблемы:

  • значения 0 и 340 соприкасаются друг с другом и не имеют такой же разрыв, как у других столбцов
  • "ось x" немного смещена, так что 0 не указывает на "север"

См. Этот минимальный пример.



suppressWarnings(library(ggplot2))


df <- data.frame(x = seq(0,359,20),y = 1)

ninety = c(0,90,180,270)

p <- ggplot(df, aes(x,y)) +
  geom_col(colour = "black",fill = "grey") +
  geom_label(aes(label = x)) + 
  scale_x_continuous(breaks = ninety) +
  geom_vline(xintercept = ninety, colour = "red") +
  coord_polar()

p

Если я установлю пределы оси X, вращение системы координат будет правильным, но столбец в 0 исчезнет из-за недостатка места.


p+scale_x_continuous(breaks = c(0,90,180,270),limits = c(0,360))
#> Scale for 'x' is already present. Adding another scale for 'x', which
#> will replace the existing scale.
#> Warning: Removed 1 rows containing missing values (geom_col).

Создано в 2019-05-15 с помощью пакета Представить (v0.2.1)

Ответы [ 2 ]

2 голосов
/ 15 мая 2019

Так как пространство, занимаемое каждой полосой, составляет 20 градусов, вы можете сдвинуть вещи наполовину по шкале и по координатам:

ggplot(df, aes(x,y)) +
  geom_col(colour = "black",fill = "grey") +
  geom_label(aes(label = x)) + 
  scale_x_continuous(breaks = ninety,
                     limits = c(-10, 350)) + # shift limits by 10 degrees
  geom_vline(xintercept = ninety, colour = "red") +
  coord_polar(start = -10/360*2*pi) # offset by 10 degrees (converted to radians)

plot

1 голос
/ 15 мая 2019

Я получил это ближе к тому, что вы хотите, но это немного хак, поэтому я не знаю, если это хорошее решение.

Код:

df <- data.frame(x = seq(0,359,20),y = 1)

ggplot(df, aes(x+10,y, hjust=1)) +
  geom_col(colour = "black",fill = "grey") +
  geom_label(aes(x=x+5,label = x)) + 
  scale_x_continuous(breaks = c(0,90,180,270),limits = c(0,360)) +
  coord_polar() 

Вместопостроение geom_cols в c (0,20,40, ...) Теперь я строю их в c (10,30,50, ...).Я строю geom_labels на c (5, 15, 25, ...).

Расположение метки внизу графика все еще не идеально, так как 180deg не на юг.

Я получаю этот график: enter image description here

...