Изменение текста в легенде в карте ggplot R Studio - PullRequest
0 голосов
/ 01 марта 2019

Я пытаюсь создать карту США, заполненную уровнем жара при заболеваниях гриппом.У меня 2 проблемы:

  1. Не удалось изменить текст переменной в легенде.
  2. Порядок легенды неправильный.1-> 10-> 2 -> ...

Вот код.

library(maps)
library(ggplot2)

# Get all states data
all_states <- map_data("state")

# Clean the data
subHeat <- subset(q4_heatMap, WEEK=="4")
region <- tolower(subHeat$STATENAME)
stateHeat <- subHeat$ACTIVITY.LEVEL
stateHeat <- gsub('Level ', '', stateHeat)
usHeat <- data.frame(region,stateHeat)

# Merge two set of dataframes
heatTotal <- merge(all_states, usHeat,by="region")

# heatColor
heatColor <- c("peru", "hotpink", "orchid", 
               "mediumpurple", "deepskyblue", "cyan3","mediumseagreen",
               "limegreen","darkkhaki","salmon")

Я использовал scale_fill_map (tags = c (...)),но это не сработало.

# Generate plot
usHeatMap <- ggplot(data = heatTotal) + 
             geom_polygon(aes(x = long, y = lat, fill = stateHeat, group = group)) + 
             coord_fixed(1.3) + 
             labs(title = "2018-19 Influenza Season Week 4",
                     x = "Longitude", y="Latitude", color="Heat level") + 
             scale_fill_manual(labels=c("Extreme High","Middle High","Low High",
                                       "Moderate","Low Moderate","Higher Low","Low",
                                       "Minimal","Very Minimal","Extreme Minimal")
                     ,values = heatColor)

Сгенерированный вывод:

wrongLegend.png

РЕДАКТИРОВАТЬ

ссылка на файл q4_heatmap -> q4_heatmap.csv

1 Ответ

0 голосов
/ 01 марта 2019

Проблема заключалась в том, что stateHeat читался как символ вместо числа, а дискретный тип фактора упорядочивал его 1, 10, 2, 3 ...

Следовательно, нам следует изменить порядок множителя,с fct_reorder и скажите, что мы хотим от 1 до 10 в правильном числовом порядке.

library(maps)
#> Warning: package 'maps' was built under R version 3.5.2
library(ggplot2)

# Get all states data
all_states <- map_data("state")

# Get usheat data
q4_heatMap <- read.csv("https://download2261.mediafire.com/52r319zccrkg/jkz9ak66bj4sl24/q4_heatmap.csv")

# Clean the data
subHeat <- subset(q4_heatMap, WEEK=="4")
region <- tolower(subHeat$STATENAME)
stateHeat <- subHeat$ACTIVITY.LEVEL
stateHeat <- gsub('Level ', '', stateHeat)
usHeat <- data.frame(region,stateHeat)

# make sure stateHeat is in the correct data type (factor) and the levels are in the right order
library(forcats)
usHeat$stateHeat <- fct_relevel(stateHeat, as.character(1:10))
# check data type and factor level order 
levels(usHeat$stateHeat)
#>  [1] "1"  "2"  "3"  "4"  "5"  "6"  "7"  "8"  "9"  "10"

# Merge two set of dataframes
heatTotal <- merge(all_states, usHeat, by="region")

# heatColor
heatColor <- c("peru", "hotpink", "orchid", 
               "mediumpurple", "deepskyblue", "cyan3","mediumseagreen",
               "limegreen","darkkhaki","salmon")

# Plot
(usHeatMap <- ggplot(data = heatTotal) + 
    geom_polygon(aes(x = long, y = lat, fill = stateHeat, group = group)) + 
    coord_fixed(1.3) + 
    labs(title = "2018-19 Influenza Season Week 4",
         x = "Longitude", y="Latitude", color="Heat level"))

# labels and custom colors
usHeatMap + scale_fill_manual(labels=c("Extreme High","Middle High","Low High",
                                        "Moderate","Low Moderate","Higher Low","Low",
                                        "Minimal","Very Minimal","Extreme Minimal")
                      ,values = heatColor)

Создано в 2019-02-28 пакетом Представление (v0.2.1)

...