2016-10-17 1 views
2

Надеюсь, кто-то может помочь мне с этой проблемой. Я пробовал несколько решений без успеха.Как выровнять geom_text согласно значениям часов

Я хочу повторить следующую цифру # 1. Поэтому я добавил переменные часы (со значениями от 1 до 12) в мой фрейм данных, чтобы использовать его в качестве параметра для выравнивания geom_text.

Рисунок Я хочу повторить:

figure i want to replicate

Моя фигура:

my figure

После моего кода для построения:

p1 <- ggplot(data, aes(x=tax, y=employment)) + geom_point(colour = ifelse(style == 1 | style == 2,"black","grey")) + geom_smooth(method=lm, se=FALSE) 
p1 + coord_cartesian(xlim = c(0, 0.8), ylim = c(0.5,0.9), expand = FALSE) + labs(x = "1 - participation taxrate", y="Employment rate") + geom_text(aes(family = "Times New Roman", label=ifelse(style == 1 | style == 2 ,Country,''))) + theme_bw() 
+0

Вы были бы счастливы с более разборчивыми надписями (т. Е. Меньше/без наложения) или вы хотите переделать свой пример? – Nate

+0

@NathanDay, если возможно, я хотел бы разместить текст в соответствии с моей переменной часов. В противном случае я попытаюсь сделать его более понятным с помощью ggrepel. Или у вас есть более легкое решение? – Kaizen502

+0

вы можете использовать 'position = position_nudge()' с соответствующими значениями для x и y. – shadow

ответ

0

Если указано значение времени, вы можете легко вычислить направление и, следовательно, сумму, которую вы хотите, чтобы подталкивать в каждом направлении:

angle <- clock/12*2*pi 
radius <- 0.01 
ng <- data.frame(x = radius * sin(angle), 
       y = radius * cos(angle)) 

Тогда вы можете просто добавить position = position_nudge(x = ng$x, y = ng$y) в geom_text заявлении. Ниже я также удалил линии сетки, которые не отображаются в фигуре, которую вы пытаетесь реплицировать.

p1 + coord_cartesian(xlim = c(0, 0.8), ylim = c(0.5,0.9), expand = FALSE) + 
    labs(x = "1 - participation taxrate", y="Employment rate") + 
    geom_text(aes(family = "Times New Roman", label=ifelse(style == 1 | style == 2 ,Country,'')), 
      position = position_nudge(x = ng$x, y = ng$y)) + 
    theme_bw() + 
    theme(panel.grid.major.x = element_blank(), 
     panel.grid.minor.x = element_blank())