2016-03-18 3 views
1

У меня есть этот набор данные:R ggplot слишком много лейбл

x timw    y  class 
1 2010-04-01 00:00:00 843.2 normal 
2 2010-04-01 00:01:00 846.3 normal 
3 2010-04-01 00:02:00 838.6 normal 
4 2010-04-01 00:03:00 839.9 normal 
5 2010-04-01 00:04:00 841.0 normal 
6 2010-04-01 00:05:00 843.3 normal 
7 2010-04-01 00:06:00 844.2 normal 
8 2010-04-01 00:07:00 844.6 normal 
9 2010-04-01 00:08:00 840.0 normal 
10 2010-04-01 00:09:00 842.2 normal 

Я использую ggplot для того, чтобы просмотреть данные:

ggplot(df, aes(x=x, y=y)) + geom_point(aes(color=factor(class)))+ 
    scale_colour_manual(
    values = c("normal" = "green","early warning" = "orange","changepoint" = "red"))+ 
theme(axis.text.x = element_text(face="bold", color="#993333", 
           size=14, angle=90)) + 
    scale_x_discrete(limits=as.character(df$time)) 

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

100 timestamps picture

Я пытался использовать breaks prameters в scale_x_discrete но не отображает метку времени:

indexes<-c(1,10,15) 
ggplot(df, aes(x=x, y=y)) + geom_point(aes(color=factor(class)))+ 
scale_colour_manual(
values = c("normal" = "green","early warning" = "orange","changepoint" = "red"))+ 
theme(axis.text.x = element_text(face="bold", color="#993333", 
          size=14, angle=90)) + 
scale_x_discrete(breaks=indexes limits=as.character(df$time)) 

0 timestamps picture

+0

Попробуйте преобразовать ваши временные метки в дату с 'as.Date'. «ggplot» должен иметь возможность отображать метки более красиво автоматически. – coffeinjunky

+1

@coffeinjunky Я думаю, что 'strptime' для преобразования в формат даты лучше подходит в этом случае – Jaap

+0

Хорошая точка! 'as.Date', возможно, не работает. Важным моментом является указание 'ggplot' переменной времени не символом, а переменной времени. – coffeinjunky

ответ

0

Если у вас есть непрерывный или DATETIME переменных, scale_x_discrete не правильная шкала для использования. Как видно из названия, вы можете использовать это только для дискретных (= факторных или группирующих) переменных.

Таким образом, вы должны убедиться, что переменная timw указана в правильном формате даты и времени. Вы можете сделать это с strptime:

mydf$timw <- strptime(mydf$timw, format = "%Y-%m-%d %H:%M:%S", tz = "GMT") 

Когда сюжет, вы можете установить перерывы и форматирование этикеток с scale_x_datetime, пример:

ggplot(mydf, aes(x = timw, y = y)) + 
    geom_point() + 
    scale_x_datetime(date_breaks = '1 mins', date_labels = '%H:%M') + 
    theme_minimal(base_size = 14) 

, который дает:

enter image description here


Используемые данные:

mydf <- structure(list(x = 1:10, 
         timw = c("2010-04-01 00:00:00", "2010-04-01 00:01:00", "2010-04-01 00:02:00", "2010-04-01 00:03:00", 
           "2010-04-01 00:04:00", "2010-04-01 00:05:00", "2010-04-01 00:06:00", "2010-04-01 00:07:00", 
           "2010-04-01 00:08:00", "2010-04-01 00:09:00"), 
         y = c(843.2, 846.3, 838.6, 839.9, 841, 843.3, 844.2, 844.6, 840, 842.2), 
         class = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "normal", class = "factor")), 
        .Names = c("x", "timw", "y", "class"), row.names = c(NA, -10L), class = "data.frame") 
Смежные вопросы