2017-05-04 2 views
2

저는 Mathematica에서 R으로 전환하고 있지만 시각화로 인해 어려움을 겪고 있습니다.그래디언트 색상 및 고정 눈금 히트 맵 ggplot2

나는 다음과 같이 히트 맵을 할 노력하고있어 :

short 
    penetration scc   pi0 
1   0 0 0.002545268 
2   5 0 -0.408621176 
3   10 0 -0.929432006 
4   15 0 -1.121309680 
5   20 0 -1.587298317 
6   25 0 -2.957853131 
7   30 0 -5.123329738 
8   0 50 1.199748327 
9   5 50 0.788581883 
10   10 50 0.267771053 
11   15 50 0.075893379 
12   20 50 -0.390095258 
13   25 50 -1.760650073 
14   30 50 -3.926126679 
15   0 100 2.396951386 
16   5 100 1.985784941 
17   10 100 1.464974112 
18   15 100 1.273096438 
19   20 100 0.807107801 
20   25 100 -0.563447014 
21   30 100 -2.728923621 

mycol <- c("navy", "blue", "cyan", "lightcyan", "yellow", "red", "red4") 

ggplot(data = short, aes(x = penetration, y = scc)) + 
    geom_tile(aes(fill = pi0)) + 
    scale_fill_gradientn(colours = mycol) 

을 그리고 난이 얻을 :

enter image description here

을하지만 이런 식으로 뭔가가 필요합니다 enter image description here

을 그 그렇습니다, 나는 색깔이 각각에 대해 불연속 대신에 음영의 표면을 통해 연속적으로 (저하 된) 것을 원합니다. 광장. 나는 다른 사람들의 질문에서 어떤 사람들이 데이터를 보간했다는 것을 알았지 만, ggplot 호출 내에서 더 쉬운 방법이 있어야한다고 생각한다. (Mathematica는 기본적으로 행해진 다.)

게다가 0은 항상 흰색 (양수 값은 따뜻한 색, 음수 값은 춥다)으로 색 눈금을 고정하고 범위와 관계없이 색 분포가 항상 동일한 것으로 나타냅니다. (나는 여러 데이터 세트에 대해 동일한 플롯 구조를 사용하기 때문에) 데이터의

+1

, 정확한 기능은'scale_fill_gradient2 (중간 점 = 0 , 낮음 = "네거티브 색", 중간 = "흰색", 높음 = "긍정적 인 색")'. 이는 제로를 항상 흰색으로 제한합니다. – Brian

답변

3

당신은 interpolate=TRUEgeom_raster를 사용할 수 있습니다

ggplot(short , aes(x = penetration, y = scc)) + 
    geom_raster(aes(fill = pi0), interpolate=TRUE) + 
    scale_fill_gradient2(low="navy", mid="white", high="red", 
         midpoint=0, limits=range(short$pi0)) + 
    theme_classic() 

enter image description here

모든 플롯간에 pi0 값으로 동일한 색상 매핑을 얻으려면 scale_fill_gradient2limits 인수를 각 플롯에서 동일하게 설정하십시오. 당신은 세 가지 데이터 short라는 프레임, short2short3이있는 경우 예를 들어,이 작업을 수행 할 수 있습니다

# Get range of `pi0` across all data frames 
pi0.rng = range(lapply(list(short, short2, short3), function(s) s$pi0)) 

이 그런 다음 플롯의 모두 scale_fill_gradient2limits=pi0.rng을 설정합니다.

0

나는 당신의 scale_fill_gradient2 조정 것 :

scale_fill_gradient2('pi0', low = "blue", mid = "white", high = "red", midpoint = 0) 

플롯 색상을 직접 비교 각각의 플롯에 일치 limits를 추가 할 : 당신의 색상에 대한

scale_fill_gradient2('pi0', low = "blue", mid = "white", high = "red", midpoint = 0, limits=c('your lower limit','your upper limit'))