вращение ключа легенды в ggplot2 - PullRequest
0 голосов
/ 03 июня 2018

Мой набор данных выглядит следующим образом

dput(data2)
structure(list(School = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 
3L, 3L), .Label = c("School1", "School2", "School3"), class = "factor"), 
    Year = c(2015L, 2014L, 2013L, 2015L, 2014L, 2013L, 2015L, 
    2014L, 2013L), Rate = c(70L, 50L, 30L, 80L, 90L, 11L, 60L, 
    50L, 40L)), .Names = c("School", "Year", "Rate"), class = "data.frame", row.names = c(NA, 
-9L))


   School Year Rate
1 School1 2015   70
2 School1 2014   50
3 School1 2013   30
4 School2 2015   80
5 School2 2014   90
6 School2 2013   11
7 School3 2015   60
8 School3 2014   50
9 School3 2013   40

Я строю эти данные с помощью ggplot2 следующим образом

library(ggplot2)
ggplot(data=data2,aes(x=School,y=Rate)) +
  geom_bar(stat = "identity", fill="orange",width = 0.5) + 
  geom_hline(aes(yintercept = 220,color="red"), size = 1) +
  coord_flip() 

, что дает мне следующую диаграмму, и я пытаюсь повернуть линию влегенда выглядит следующим образом enter image description here

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

Пожалуйста, кто-нибудь может помочь мне понять, как я могу повернуть линию в легенде.

Одна альтернатива, которая пришла в голову, - перемещаться по окнам просмотра с помощью пакета сетки, а затем посмотреть, могу ли я повернуть окно просмотра, используемое ключом легенды.

Ответы [ 2 ]

0 голосов
/ 03 июня 2018

Существует пакет, который реализует горизонтальную версию общих ggplot2 Geoms, Stats и Positions: ggstance

Вы можете использовать это, чтобы избежать coord_flip всего графика и использоватьвместо горизонтальной панели геом с x и y, как вы хотите.Таким образом, вы можете использовать geom_vline с вертикальной легендой.

data2 <- tibble::tribble(
  ~School, ~Year, ~Rate,
  "School1", 2015L,   70L,
  "School1", 2014L,   50L,
  "School1", 2013L,   30L,
  "School2", 2015L,   80L,
  "School2", 2014L,   90L,
  "School2", 2013L,   11L,
  "School3", 2015L,   60L,
  "School3", 2014L,   50L,
  "School3", 2013L,   40L
)

library(ggplot2)
library(ggstance) # devtools::install_github("lionel-/ggstance")
#> 
#> Attachement du package : 'ggstance'
#> The following objects are masked from 'package:ggplot2':
#> 
#>     geom_errorbarh, GeomErrorbarh
ggplot(data=data2,aes(x=Rate,y=School)) +
  geom_barh(stat = "identity", fill="orange",width = 0.5) + 
  geom_vline(aes(xintercept = 220,color="red"), size = 1)

Создано в 2018-06-03 пакетом Представить (v0.2.0).

0 голосов
/ 03 июня 2018

Если ваш фактический сюжет имеет более сложные требования к легендам, основанные на разных геометриях, здесь могут быть полезны ответы: Как повернуть символы легенды в ggplot2?

Тем не менее, если вы простонужно что-то для слоя geom_hline, легенда, связанная с geom_vline, будет достаточной для его подделки:

ggplot(data = data2, aes(x = School, y = Rate)) +
  geom_col(fill = "orange", width = 0.5) + 

  # do not specify color within aes() for geom_hline
  geom_hline(aes(yintercept = 220), color="red", size = 1) +

  # specify color within aes() for geom_vline instead, but don't let the line
  # be invisible with alpha = 0
  geom_vline(aes(xintercept = 1, color = "legend.label"), alpha = 0) +

  # set up the color legend as per normal. it's based on an invisible geom_vline,
  # but is visible with alpha = 1 & size = 1
  scale_color_manual(
    name = "legend.title",
    values = "red",
    guide = guide_legend(override.aes = list(alpha = 1, size = 1))) +

  coord_flip()

plot

Кстати, geom_col() эквивалентно geom_bar(stat = "identity") и выглядит менее загроможденным.

...