Раскраска по вертикали в facet_grid в ggplot - PullRequest
2 голосов
/ 15 февраля 2020

Я создал круговую сетку, в которой каждая строка отображает положение государства по 7 различным параметрам в зависимости от размеров круга. Эти параметры приведены в процентах и ​​составляют до 100 для каждого состояния. Для моей facet_grid я бы хотел покрасить и настроить размер каждого круга на основе шкалы для отдельных состояний, а не для всей сетки. Я подробно остановлюсь на примере.

круговая сетка

library(ggforce)
library(tidyverse)
library (ggplot)
library(reshape2)

d <- data.frame("state" = c("Alabama", "Florida", "Washington", "New York"),
       "A" = c(20, 25, 45, 11),
       "B" = c(25, 25, 10, 4),
       "C" = c(50, 5, 20, 5),
       "D" = c(5, 45, 25, 80))

d1 <- melt(d, id.vars = "state")

p3 <- ggplot(d1) +
  geom_circle(aes(x0 = 0.5, y0 = 0.5, r = value, color = "white", fill = value), data = d1) +
  scale_fill_continuous(low = "#5fc5bd", high = "#f37021") +
  scale_color_manual(values = "white") +
  coord_fixed() +
  theme_bw() +
  theme(panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        axis.ticks = element_blank() ,
        legend.position = "none",
        panel.border = element_blank(), 
           axis.title.x=element_blank(),
           axis.title.y=element_blank(),
        axis.text = element_blank())

p3 <- p3 + facet_grid(state ~ variable, labeller=label_wrap_gen(width=10)) +
  theme(strip.text.x = element_text(size = 10, face = "bold"),
          strip.text.y = element_text(size = 10, face = "bold"),
          strip.background = element_rect(colour = "gray", fill = "white"))
p3

На данный момент круги на графике масштабируются в соответствии с самыми большими значениями во всем наборе данных. Я хотел бы, чтобы он учитывал значения для каждого штата и масштабировал размеры кругов на основе значений для каждого штата - поэтому самый большой круг в Алабаме должен быть C, окрашен в оранжевый цвет (самое высокое значение для этого штата) и аналогично для других штатов , Любые идеи будут очень полезны, спасибо.

enter image description here

1 Ответ

3 голосов
/ 15 февраля 2020

Вы можете добавить новый столбец в df1 для достижения этого:

d1 <- melt(d, id.vars = "state") %>%
      group_by(state) %>%
      mutate(per_state = value/max(value))

Теперь вы установите r = per_state и fill = per_state, чтобы получить это:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...