2016-09-30 10 views
-1

Я пытаюсь сделать графики, используя ggplot в R, и у меня такая же проблема, о которой говорилось ниже.маркировка оси дат в ggplot?

Date axis labels in ggplot2 is one day behind

Мои данные в диапазоне от 2016-09-01 до 2016-09-30, но этикетки участков говорят, 2016-08-31 в первый день данных. Я решил проблему с решением в предыдущем вопросе, а именно: (? Является ли это, чтобы установить перерывы и этикетки, принимая точные даты из данных)

ggplot(df, aes(x, y)) + 
    geom_point() + 
    scale_x_datetime(breaks =df$x , labels = format(df$x, "%Y-%m-%d")) 

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

see my plot here

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

Что мне делать, чтобы решить эту проблему? Мне нужно новое решение.

+0

Вы можете просто установить формат без перерывов с помощью 'scale_x_date (date_labels = '% F')'. Если вам нужно установить перерывы, установите более разнесенные, а не каждое значение x. Кроме того, вы должны предоставить некоторые выборочные данные в своем вопросе, чтобы сделать его [воспроизводимым] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example). – alistaire

+0

@alistaire 'scale_x_date (date_labels = '% F')' уже использовался, когда я столкнулся с первой упомянутой проблемой, которая заключается в том, что даты не совпадают с метками по оси x :( –

+0

@alistaire Я не предоставил данные, потому что Я думал, что если бы я загрузил данные как сырые данные, это не сделало бы эту проблему. Данные были сделаны несколькими процессами в рабочем пространстве R. Спасибо за ваш ответ. –

ответ

1

Просто используйте этот параметр, если вы хотите, чтобы ваши даты появляться вертикально (таким образом, вы можете увидеть все ваши даты):

ggplot(df, aes(x, y)) + 
geom_point() + 
scale_x_datetime(breaks =df$x , labels = format(df$x, "%Y-%m-%d")) + 
theme(axis.text.x = element_text(angle=90, vjust = 0.5)) 
+0

Спасибо! Я думал об использовании этой стратегии –

0

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

# set breaks first by seq.POSIXt 
breaks.index <- seq.POSIXt(from=as.POSIXct(strftime("2020-01-01", format="%Y-%m-%d"), format="%Y-%m-%d"), to=as.POSIXct(strftime("2020-12-31", format="%Y-%m-%d"), format="%Y-%m-%d"), by="1 week") 

и

# plot 
plot <- ggplot(data, aes(x=date, y=y) 
+scale_x_datetime(breaks = breaks.index, labels = format(breaks.index, "%Y-%m-%d")) 
plot 

.

Хотя я не понимаю, что отличается от использования scale_x_date(date_labels ='%F') и как этот код работает, он работает.