2016-11-08 2 views
1

Я пытаюсь сравнить два скалярных поля и хочу нарисовать их на одном и том же участке, используя контуры, обозначающие их значения с помощью directlabels. Дело в том, что я не могу использовать две прямые метки в одном и том же сюжете.Маркировка двух контуров с direct.labels

Пример:

library(ggplot2) 
library(data.table) 
library(directlabels) 
grid <- expand.grid(lon = seq(0, 360, by = 2), lat = seq(-90, 0, by = 2)) 
grid$z <- with(grid, cos(lat*pi/180)) 
grid$z2 <- with(grid, sin(lat*pi/180)) 
grid.long <- melt(grid, id.vars = c("lon", "lat")) 

# Manually adding two geom_dl's 
ggplot(grid, aes(lon, lat)) + 
    geom_contour(aes(z = z), color = "black") + 
    geom_contour(aes(z = z2), color = "red") + 
    geom_dl(aes(z = z2, label = ..level..), stat = "contour", method = "top.pieces", color = "red") + 
    geom_dl(aes(z = z, label = ..level..), stat = "contour", method = "top.pieces", color = "black") 

только одна переменная обозначена.

Другой способ:

ggplot(grid.long, aes(lon, lat)) + 
    geom_contour(aes(z = value, color = variable)) + 
    geom_dl(aes(z = value, label = ..level.., color = variable), 
      stat = "contour", method = "top.pieces") 

Любое решение?

Спасибо!

ответ

1

Одним из решений является предоставление другого метода = аргумент для второго вызова geom_dl().

ggplot(grid, aes(lon, lat)) + 
     geom_contour(aes(z = z), color = "black") + 
     geom_contour(aes(z = z2), color = "red") + 
     geom_dl(aes(z = z2, label = ..level..), stat = "contour", method = "top.pieces", color = "red") + 
     geom_dl(aes(z = z, label = ..level..), stat = "contour", method = "bottom.pieces", color = "black") 

enter image description here

+0

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

Смежные вопросы