2016-07-01 5 views
2

У меня есть растровая карта, которую я хочу построить, используя ggplot2, используя непрерывный масштаб и помеченные изолинии поверх этого.R добавление легенды и directlabels к контуру ggplot2

Для этого я использую пакет directlabels и я близок к тому, что я хочу, но я не могу получить как легенду и меченые изолинии на ту же карту

Следующий код воспроизводит мою проблему:

install.packages(c('ggplot2', 'directlabels')) 
library('ggplot2') 
library('directlabels') 
df <- expand.grid(x=1:100, y=1:100) 
df$z <- df$x * df$y 

# Plot 1: this plot is fine but without contours  
p <- ggplot(aes(x=x, y=y, z=z), data = df) + 
    geom_raster(data=df, aes(fill=z)) + 
    scale_fill_gradient(limits=range(df$z), high = 'white', low = 'red') 
p 

# Plot 2: This plot adds the isolines but no labels and it also adds a second legend for level which I don't want 
p <- p + geom_contour(aes(colour = ..level..), color='gray30', na.rm=T,  show.legend=T) 
p 

# Plot 3: This plot has the labeled isolines but it removes the z legend that I want to show 
direct.label(p, list("bottom.pieces", colour='black')) 

Участок 1 enter image description here

Участок 2 enter image description here

Участок 3 enter image description here

Я хотел бы иметь цветной растр в фоновом режиме, с его цветом легенда на стороне и меченые изолинии на вершине. Есть ли способ сделать это?

Также есть способ получить ярлыки, расположенные посреди изолиний, а не внизу или сверху?

Заранее спасибо

Пабло

ответ

4

Во-первых, закрепляющие вопрос, чтобы сделать с легендами.

library(ggplot2) 
library(directlabels) 

df <- expand.grid(x=1:100, y=1:100) 
df$z <- df$x * df$y 

p <- ggplot(aes(x=x, y=y, z=z), data = df) + 
    geom_raster(data=df, aes(fill=z), show.legend = TRUE) + 
    scale_fill_gradient(limits=range(df$z), high = 'white', low = 'red') + 
    geom_contour(aes(colour = ..level..)) + 
    scale_colour_gradient(guide = 'none') 

p1 = direct.label(p, list("bottom.pieces", colour='black')) 
p1 

enter image description here

Там не слишком много вариантов для размещения меток. Одна из возможностей - angled.boxes, но цвет fill может быть не слишком приятным.

p2 = direct.label(p, list("angled.boxes")) 
p2 

enter image description here

Чтобы изменить fill цвет прозрачный (с использованием кода из here

p3 = direct.label(p, list("far.from.others.borders", "calc.boxes", "enlarge.box", 
     box.color = NA, fill = "transparent", "draw.rects")) 
p3 

enter image description here

И переместить ярлыки от контурных линий:.

p4 = direct.label(p, list("far.from.others.borders", "calc.boxes", "enlarge.box", 
     hjust = 1, vjust = 1, box.color = NA, fill = "transparent", "draw.rects")) 
p4 

enter image description here

+0

Это именно то, что мне нужно. Огромное спасибо. – Ludecan