2017-02-28 4 views
0

날짜 - 값 쌍으로 가득 찬 파일이 있습니다. 나는 월별로 포인트를 비우고 박스 앤드 위커 플롯을 표시하려고합니다. 제 문제는 제가 여러 달 동안의 데이터를 가지고 있다는 것입니다. 그래서 x 축 레이블 중 일부만을으로 표시하고 싶습니다.x 축에 모든 휴지통을 표시하지 않고 날짜를 지정하십시오.

내 코드는 다음과 같습니다 : 여기

library(ggplot2) 
library(reshape2) 
library(scales) 

data <- read.delim("values.tsv", header=TRUE) 

# Interpret the strings as dates 
data$Date <- as.Date(data$Date, "%Y-%m-%d %H:%M:%S %z") 

# Bin the data by month 
data$Date <- cut(data$Date, breaks="1 month") 

ggplot(data, aes(factor(Date), Temperature)) + 
    geom_boxplot() 

ggsave("output.pdf", width=8, height=6, units="in") 

적절한 형식의 일부 샘플 데이터입니다 :

Date Temperature 
2016-09-29 07:16:00 -0500 295.0 
2016-09-30 07:23:00 -0500 295.0 
2016-10-03 10:27:00 -0500 297.8 
2016-10-04 07:27:00 -0500 296.2 
2016-10-26 05:52:00 -0500 294.2 
2016-10-27 06:18:00 -0500 294.2 
2016-10-28 07:41:00 -0500 294.2 
2016-11-27 09:07:00 -0500 293.6 
2016-11-30 08:03:00 -0500 295.0 
2016-12-01 08:12:00 -0500 295.0 
2016-12-02 08:01:00 -0500 293.2 
2016-12-07 08:02:00 -0500 294.6 
2016-12-08 07:50:00 -0500 294.6 
2016-12-09 08:37:00 -0500 293.2 
2016-12-12 08:25:00 -0500 294.4 
2016-12-13 07:47:00 -0500 293.2 
2016-12-14 07:52:00 -0500 294.6 
2017-01-09 07:53:00 -0500 294.0 
2017-01-10 08:26:00 -0500 294.4 
2017-01-11 08:20:00 -0500 294.6 
2017-01-31 08:16:00 -0500 290.6 
2017-02-07 07:59:00 -0500 290.8 
2017-02-08 08:10:00 -0500 290.6 
2017-02-09 08:33:00 -0500 291.2 
2017-02-10 07:57:00 -0500 290.4 
2017-02-13 07:48:00 -0500 290.4 
2017-02-28 08:19:00 -0500 291.8 

실제 데이터는 사십개월에 걸쳐 수백 개의 데이터 포인트로 구성되어 있습니다. 데이터가 제대로 비닝되고있다하지만

scale_x_date(date_breaks="4 months", date_labels="%b '%y") 

를 통해 규모를 추가하려고 할 때 cut 다른-문자열 뭔가 입력 날짜 변환 것으로 보인다 오류

Error: Invalid input: date_trans works with objects of class Date only

을 얻을, 나는 가정합니다. scale_x_date을 적용 할 수 있도록 x 축 값을 날짜로 다시 변환하려면 어떻게해야합니까?

+0

플롯 앞에 '날짜'클래스를 확인 했습니까? 그러나 날짜라고해도 'aes (factor (Date)'를 호출하면 ggplot 호출에서 요소로 다시 변환되므로 scale_x_date가 작동하지 않는다고 생각합니다.) – lbusett

+0

@LorenzoBusetto 예,'cut' 호출을 생략하면 나중에 scale_x_date를 성공적으로 사용할 수 있습니다. 즉,'Date'에 실제로 날짜가 포함되었다고 가정한다고 가정합니다. – bdesham

답변

2

cut은 데이터를 요인으로 변환하므로 더 이상 날짜가 아니기 때문에 scale_x_date을 적용 할 수 없습니다.

boxplot에 대한 1 개월 그룹화 변수를 만들고 aes 호출에서 관측치를 그룹화하여이 문제를 해결할 수 있습니다.

data$Month <- cut(data$Date, breaks="1 month") 

ggplot(data, aes(Date, Temperature, group = Month)) + 
    geom_boxplot() + 
    scale_x_date(date_breaks="4 months", date_labels="%b '%y") 

X는 아직 날짜이지만 사용자의 관측치는 플롯의 용도로 그룹화됩니다. 줄거리를 업로드하는 데 문제가 있습니다. 그러나 샘플 데이터를 기반으로 올바르게 작동한다고 생각합니다.

+0

완벽하게 작동했습니다. 감사합니다! – bdesham

관련 문제