2016-08-27 2 views
2

Я новичок, поэтому извиняюсь, если мой вопрос слишком прост. Прошло около 4 дней с тех пор, как я набрал первую команду ggplot2. Я прочитал How can I apply a gradient fill to a geom_rect object in ggplot2? перед публикацией, но этот пост, похоже, фокусируется на создании градиента rect, который я уже сделал.Маркировка geom_rect() в ggplot2

Цель: Я хочу подчеркнуть, какие американских президентов были безработица> 10000 (единицы не важно, потому что мое внимание способность построить графики

presidential <- subset(presidential, start > economics$date[1]) 
ggplot(economics) + 
     geom_rect(
     aes(xmin = start, xmax = end, fill = party), 
     ymin = -Inf, ymax = Inf, alpha = 0.2, 
     data = presidential 
     ) + 
     geom_vline(
     aes(xintercept = as.numeric(start)), 
     data = presidential, 
     colour = "grey50", alpha = 0.5 
     ) + 
     geom_text(
     aes(x = start, y = 2500, label = name), 
     data = presidential, 
     size = 3, vjust = 0, hjust = 0, nudge_x = 50, check_overlap = TRUE 
     ) + 
     geom_line(aes(date, unemploy)) + 
     geom_rect(
     aes(xmin = start, xmax = end), 
     ymin = 10000, ymax = Inf, alpha = 0.4, fill = "chartreuse", 
     data = presidential 
     ) + 
     geom_text(
     aes(x = as.Date("1993-01-20"), y = 12000, label = "High unemployment"), 
     size = 3, vjust = 0, hjust = 0, color = "forestgreen" 
     )+ 
     scale_fill_manual(values = c("blue", "red")) 

Выходной график:.

Graph

Как мы можем видеть, я смог создать ярлык для зеленого прямоугольника, который показывает уровень безработицы> 10000. Однако я недоволен этим подходом, потому что это всего лишь критика k fix (т.е. Я получил его для работы, установив параметры x, y, nudges и т. Д.). Что, если изменяется масштаб оси? Текст будет искажен или, возможно, не будет виден. У меня есть два вопроса:

Вопрос 1: Есть ли мы программно обозначить зеленый прямоугольник таким образом, чтобы безработица> 10000? Я не слишком обеспокоен тем, используем ли мы текст, ярлык или легенду. Я предполагаю, что использование geom_text() потребует быстрого исправления (т. Е. Много прогонов и повторных запусков, чтобы обеспечить правильное отображение текста, постоянно настраивая x, y, vjust, hjust и nudges), но легенда настройки или метка могут быть автоматическими.

Вопрос 2 Это концептуальный вопрос - когда я называю scale_fill_manual(), как ggplot2 будет знать, хочу ли я красные и синие цвета для вертикального прямоугольника или горизонтального прямоугольника? Мне любопытно. Почему он не просит меня предоставить цвета также для горизонтальных и вертикальных прямоугольников? Является ли это тем, что я уже предоставил постоянный цвет для горизонтального прямоугольника, используя color = forestgreen, так что ему нужен только цвет для оставшихся пар вертикальных прямоугольников, т. Е. Красный и синий?

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


Update:

Вот dput данных:

structure(list(name = c("Nixon", "Ford", "Carter", "Reagan", 
"Bush", "Clinton", "Bush", "Obama"), start = structure(c(-346L, 
1681L, 2576L, 4037L, 6959L, 8420L, 11342L, 14264L), class = "Date"), 
    end = structure(c(1681L, 2576L, 4037L, 6959L, 8420L, 11342L, 
    14264L, 17186L), class = "Date"), party = c("Republican", 
    "Republican", "Democratic", "Republican", "Republican", "Democratic", 
    "Republican", "Democratic")), .Names = c("name", "start", 
"end", "party"), row.names = c(NA, -8L), class = c("tbl_df", 
"tbl", "data.frame")) 

Экономика данные общедоступны с ggplot2 пакетом

head(economics) 
# A tibble: 6 x 6 
     date pce pop psavert uempmed unemploy 
     <date> <dbl> <int> <dbl> <dbl> <int> 
1 1967-07-01 507.4 198712 12.5  4.5  2944 
2 1967-08-01 510.5 198911 12.5  4.7  2945 
3 1967-09-01 516.3 199113 11.7  4.6  2958 
4 1967-10-01 512.9 199311 12.5  4.9  3143 
5 1967-11-01 518.1 199498 12.5  4.7  3066 
6 1967-12-01 525.8 199657 12.1  4.8  3018 
+0

Просьба представить воспроизводимый пример (т. Е. Данные) –

+0

@CyrusMohammadian. В приведенном выше коде используются стандартные библиотеки и пакеты ggplot2, то есть экономика и президентские права. Вы видите ошибки? – watchtower

+0

Ваш вопрос не о ошибке. Я знаю, что вы используете '' ggplot2'', то, что я хочу, это ваши исходные данные, поэтому я могу помочь решить ваши вопросы. См. Это руководство для размещения вопросов по SO http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example –

ответ

2
presidential <- subset(presidential, start > economics$date[1]) 
ggplot(economics) + 
     geom_rect(
     aes(xmin = start, xmax = end, fill = party), 
     ymin = -Inf, ymax = Inf, alpha = 0.2, 
     data = presidential 
     ) + 
     geom_vline(
     aes(xintercept = as.numeric(start)), 
     data = presidential, 
     colour = "grey50", alpha = 0.5 
     ) + 
     geom_text(
     aes(x = start, y = 2500, label = name), 
     data = presidential, 
     size = 3, vjust = 0, hjust = 0, nudge_x = 50, check_overlap = TRUE 
     ) + 
     geom_line(aes(date, unemploy)) + 
     geom_rect(
     aes(xmin = start, xmax = end, fill = "chartreuse"), 
     ymin = 10000, ymax = Inf, alpha = 0.4, 
     data = presidential 
     ) + 
     geom_text(
     aes(x = as.Date("1993-01-20"), y = 12000, label = "High unemployment"), 
     size = 3, vjust = 0, hjust = 0, color = "forestgreen" 
     )+ 
     scale_fill_manual(values = c("chartreuse", "red", "blue"), labels=c("High Unemployment","Democrat","Republican"))+labs(fill="") 

enter image description here

Насколько идет ваш второй вопрос, цвет отображается в вертикальном направлении, потому что ваш первоначальный вызов ...

geom_rect(
     aes(xmin = start, xmax = end, fill = party), 
     ymin = -Inf, ymax = Inf, alpha = 0.2, 
     data = presidential 
     ) 

... идентифицирует начало прямоугольника на start дату и его конец на дате end, но для оси y размеры установлены на Inf, таким образом, цвет отображается вертикально.

+0

Потрясающий ответ! Я не совсем понял вторую часть вопроса. Я понимаю ограничения на 'geom_rect()'. Я думаю, что мой вопрос в том, что как «ggplot2» распределяет цвета между прямоугольником «Высокий уровень безработицы» и «Демократическим или республиканским» прямоугольником? По сути, как узнать порядок, в котором ggplot2 присваивает цвета? то есть 'scale_fill_manual (значения = c (" chartreuse "," red "," blue ")' может быть присвоено {безработный, dem, rep} OR {dem, rep, безработный} OR {rep, dem, unempl} и т. д. т.е. любая из шести комбинаций). Не могли бы вы мне помочь? – watchtower

+0

вы установили их с помощью опций '' values'' и '' labels'' в '' scale_fill_manual() '' вызов –

+0

Ok. Если вы измените последняя строка до 'scale_fill_manual (значения = c (« синий »,« красный »,« шартрез »), метки = c (« демократ »,« республиканский »,« высокая безработица »)) + labs (fill =" ")' в вашем коде, то вы увидите, что цветовое задание искажено, то есть синий цвет идет там, где должен был быть шартрейс. То же самое с цветом Шартреза. – watchtower

Смежные вопросы