Как использовать выражения с directlabels в ggplot
Я искал способ избежать наложения меток на графиках рассеяния. Я нашел directlabels, который работает нормально, но не позволяет мне использовать выражения в качестве меток или выбирать, какие метки я хочу отображать, а какие нет.
Вот пример:
p1 использует geom_text() для построения некоторых (тех, которые я выбираю) меток с разбором выражений, что позволяет использовать такие вещи, как греческие буквы и верхний индекс, но метки могут перекрываться.
p2 избегать наложения с directlabels(), но я не могу контролировать, какие метки наносятся на карту, и не использовать синтаксический анализ выражений.
Как я могу иметь преимущества обоих методов?
require(ggplot2)
require(directlabels)
par <- c("Ei", "Gb", "Gf", "Gl", "w1", "w2", "w3", "w4",
"w5", "Alpha", "Beta", "Amin", "dl", "df")
df <- data.frame(x=runif(14), y=runif(14), Parameters=par)
# labels with expressions
labels <- c("Ei" = 'E[i]', "Gb" = 'G[b]', "Gf" = 'G[f]', "Gl" = 'G[l]',
"w1" = 'omega[1]', "w2" = 'omega[2]', "w3" = 'omega[3]', "w4" = 'omega[4]',
"w5" = 'omega[5]', "Alpha" = 'alpha', "Beta" = 'beta', "Amin" = 'A[min]',
"dl" = 'd[l]', "df" = 'd[f]')
# and missing values
labels[which(sqrt(df$x^2 + df$y^2) < .5)] <- NA
p1 <- ggplot(data=df, aes(y=y, x=x, colour=Parameters)) +
geom_point() + scale_colour_discrete() +
coord_cartesian(xlim=c(-2,3), ylim=c(-2,3)) + # causes overlapping
geom_text(aes(label = labels), hjust=-0.3, vjust=1,
show_guide=FALSE, parse=TRUE)
p1 # selected labels appear with correct expression
p2 <- direct.label(p1, method='smart.grid')
p2 # all labels appear (not wanted) without expression parsing