2016-10-27 6 views
-1

Я пытаюсь создать объект сюжета и добавить к нему данные позже. Я собираюсь установить два года избирательного цикла и добавить вертикальные линии в точке, где произошли ключевые события. Но моя попытка разместить вертикальные линии на графике с интервалом в шесть месяцев вместо этого поставила линии оси y.scale_x_discrete() меняет ось y

library(ggplot2) 


dateline = seq(as.Date("2011/1/1"), by = "month", length.out = 24) 
values = rnorm(24) 


events = data.frame(dateline, values) 


ggplot(events, aes(x=dateline, y=values)) + 
    scale_x_discrete(breaks=c("2011-01-01","2011-07-01","2012-01-01","2012-07-01")) + 
    labs(x="2012 Election Cycle") 

Результат: enter image description here

Теперь я думаю, что линии должны быть на оси х и быть запущен вверх и вниз, нет? И еще более странно, что использование scale_y_continuous() приводит к поведению, которое я ожидал для x.

enter image description here

Что делает это более запутанной, что я следовал учебник довольно близко где scale_x_discrete() ведет себя так, как я ожидал, то есть, создавая вертикальные линии для оси х. Я теряю рассудок?

http://sharpsightlabs.com/blog/2014/11/24/r-line-chart-and-datavis-process/

+0

Пожалуйста, уделите время правильному форматированию кода (а также загрузите пакет 'ggplot2'. На ваш вопрос: вы вынуждаете дискретный масштаб по числовым значениям, что не работает (даты представляют собой целочисленные значения, то есть количество дней от 1970-01-01 Я думаю) .Вы можете захотеть нечто вроде 'ggplot (события, aes (x = as.character (dateline), y = values)) + scale_x_discrete (breaks = c (" 2011-01-01 " , "2011-07-01", "2012-01-01", "2012-07-01")) 'или' ggplot (события, aes (x = dateline, y = values)) + scale_x_date (breaks = as .Date (c («2011-01-01», «2011-07-01», «2012-01-01», «2012-07-01»))) ' – lukeA

ответ

1

Вы должны использовать непрерывную шкалу. Это работает для меня:

ggplot(events, aes(x=dateline, y=values)) +  
    scale_x_date(date_breaks="6 months")  

В более общем плане, просто:

ggplot(events, aes(x=dateline, y=values)) 

будет работать в вашем случае, поскольку диапазон дат таким образом, что ggplot автоматически выбирает 6 месяцев, как диапазон меток, чтобы показать (это поэтому пример непрерывного масштабирования y работает для вас, но ничего не делает, это удаление бит scale_x_discrete, который помогает).

+0

А, спасибо. Это имеет смысл. подумал, что я схожу с ума. – user3426752

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