Elio Campitelli
Elio Campitelli

Reputation: 1476

Labeling two contours with direct.labels

I'm trying to compare two scalar fields and want to draw them in the same plot using contours labeling their values with directlabels. The thing is, I'm not able to use two direct labels in the same plot.

Example:

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")

Only one variable is labeled.

Another way:

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")

Any solution?

Thanks!

Upvotes: 3

Views: 752

Answers (1)

Didzis Elferts
Didzis Elferts

Reputation: 98449

One solution is to provide different method= argument for the second geom_dl() call.

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

Upvotes: 2

Related Questions