2017-02-20 5 views
2

데이터 :지정 사용자 정의 색상 그라데이션

g1 <- ggplot(df1, aes(x=Index, y=Duration, color=Duration))+ 
geom_point()+ 
geom_line()+ 
scale_y_datetime(labels=date_format("%M:%S")) 

를이 그래프 색상은 기본 "검은 색으로 설정되어, 지금처럼 다음과 같이

df1 <- structure(list(Index = 1:11, Duration = structure(c(1487577655, 
1487577670, 1487577675, 1487577680, 1487577685, 1487577680, 1487577700, 
1487577705, 1487577695, 1487577700, 1487577680), class = c("POSIXct", 
"POSIXt"), tzone = "")), .Names = c("Index", "Duration"), class = "data.frame", row.names = 3:13) 

가 지금은 그래프를 구성 "파란색"그라데이션.

문제는 데이터에 사용자 그라디언트를 할당하는 중 오류가 발생한다는 것입니다.

비 POSIXct 객체의 경우

:

scale_color_gradient("Duration",low="#D80427", high="#07a0ff",space="Lab") 

작품,하지만 난 설명 변수로 POSIXct 객체 df1$Duration 다음과 같은 오류가 발생합니다 :

Ops.POSIXt 오류 ((X (-))의 [1])에서 DIFF '/' "POSIXt"를 개체 정의되지

다른 구배 (SECURITY) 기능을 비활성화 있는가 POSIXct 객체를 그래프로 나타낼 때 사용해야합니까?

+0

'color = as.numeric (Duration)) 시도' – zx8754

답변

2

당신은 사용할 수 있습니다 trans = time_trans() :

library(ggplot2) 
library(scales) 
g1 + 
    scale_color_gradient("Duration", low = "#D80427", high = "#07a0ff", 
         trans = time_trans()) 

enter image description here

또 다른 format의 라벨이 범례에 표시되도록하려면 다음을 추가합니다. labels = format(pretty(df1$Duration), "%M:%S").

+0

@HenryRice 이것은 받아 들여진 대답이어야하며 자유롭게 바꿀 수 있습니다. – zx8754

1

우리는 색상 번호로 날짜를 변환 할 수 있습니다

library(ggplot2) 
library(scales) 

ggplot(df1, aes(x = Index, y = Duration, color = as.numeric(Duration))) + 
    geom_point() + 
    geom_line() + 
    scale_y_datetime(labels = date_format("%M:%S")) + 
    scale_color_gradient("Duration", low = "#D80427", high = "#07A0FF", 
         labels = c("00", "10", "20", "30", "40")) 

제안으로 @Henrik하여 라벨 아래에 사용할 하드 코딩하지 않도록 :

# avoid hardcoding labels using pretty() 
ggplot(df1, aes(x = Index, y = Duration, color = as.numeric(Duration))) + 
    geom_point() + 
    geom_line() + 
    scale_y_datetime(labels = date_format("%M:%S")) + 
    scale_color_gradient("Duration", low = "#D80427", high = "#07A0FF", 
         breaks = pretty(as.numeric(df1$Duration)), 
         labels = format(pretty(df1$Duration), "%M:%S")) 
+1

완벽하게 작동합니다. 두 번째 관심사는 시간 사이의 상대 거리를 숫자로 변환하면 처음 두 숫자 값을 빠르게 테스트하면 1487577670 - 1487577655 = 15로 첫 번째 시간 값 1:10 - 00:55를 사용하는 것과 같습니다. = 15 그래서 모든면에서 좋은 해결책처럼 보입니다. 도와 주셔서 감사합니다! – Mako212

+0

@ zx8754'breaks = pretty (as.numeric (df1 $ Duration)), labels = format (pretty (df1 $ Duration), "% M : % S"를 사용하면 레이블의 하드 코딩을 피할 수 있다고 생각합니다.)'(또는 원하는 '형식'). – Henrik

+0

@Henrik 감사합니다. 게시물을 업데이트했습니다. – zx8754