2012-05-09 7 views
6

я могу использовать ggplot2 легко нарисовать график, как показано ниже:ggplot2 годограф стрелки

1

В самом деле, для моих данных, то, как показано ниже:

 
degree value 
1 120 0.50 
2 30 0.20 
3 -120 0.20 
4 60 0.50 
5 150 0.40 
6 -90 0.14 
7 -60 0.50 
8 0 0.60 

Первая колонка (от -180 до 180 или от 0 до 360), второй столбец - соответствующие значения. Поэтому я хочу, чтобы нарисовать точку графика от (0,0) к каждым моим точкам данных со стрелкой, но с круговой координатой, как показано ниже:

2 http://www.matrixlab-examples.com/image-files/polar_plots_1.gif

Я пытаюсь использовать последующий код:

base <- ggplot(polar, aes(x=degree, y=value)) 
p <- base + coord_polar() 
p <- p + geom_segment(aes(x=0, y=0, xend=degree, yend=value),  arrow=arrow(length=unit(0.3,"cm"))) 
print(p) 

Он произвел полярный сюжет, но я не получил прямую стрелку от (0,0) до моих точек данных.

Я также пытаюсь использовать plotrix пакет, чтобы нарисовать этот график. Он работает, как показано ниже:

3 http://rgm2.lab.nig.ac.jp/RGM_results/plotrix:polar.plot/polar.plot_001_med.png

Я не могу импортировать стрелку в этом графике.

Как добавить стрелки с помощью пакета plotrix или как рисовать его с помощью ggplot2?

+0

Взгляните на это сообщение: http://stackoverflow.com/questions/42276773/ggplot-connecting-points-in-polar-coordinates-with-a-straight-line – Roland

ответ

12

Настройка данных (от dput):

polar <- structure(list(degree = c(120L, 30L, -120L, 60L, 150L, -90L, 
-60L, 0L), value = c(0.5, 0.2, 0.2, 0.5, 0.4, 0.14, 0.5, 0.6)), .Names = c("degree", 
"value"), class = "data.frame", row.names = c(NA, -8L)) 

Вы можете получить прямые линии довольно легко - вы просто должны убедиться, что ваши сегменты начинаются в degree, а не 0:

library(ggplot2) 
base <- ggplot(polar, aes(x=degree, y=value)) 
p <- base + coord_polar() 
p+ geom_segment(aes(y=0, xend=degree, yend=value)) 

enter image description here Добавление стрелок, однако, делает вид, что может быть ошибка (?) - преобразование координат не учитывается при вычислении угла стрелок:

library(grid) 
p+ geom_segment(aes(y=0, xend=degree, yend=value) , 
       arrow=arrow(length=unit(0.3,"cm"))) 

enter image description here Вы можете (вроде) рубить вокруг этого, нарисовав свои наконечники стрел:

awid <- 2 
p + geom_segment(aes(y=0, xend=degree, yend=value))+ 
    geom_segment(aes(y=value-0.05,yend=value,x=degree-awid/value,xend=degree))+ 
    geom_segment(aes(y=value-0.05,yend=value,x=degree+awid/value,xend=degree)) 

enter image description here

Если вы внимательно посмотрите, вы можете увидеть, что стрелки не являются отлично (эффект гораздо более очевидный, если вы делаете awid больше).

+0

Большое спасибо! Я пробую несколько значений awid. Кажется, что awid = 0.5 намного лучше, чем 2. – boyang

+0

PS было бы неплохо включить 'expand_limits (x = c (-180,180))' в ваш код, чтобы убедиться, что вы получаете полный диапазон осей ... –

+1

PS Это действительно работает для expand_limits(), но вы также можете использовать scale_x_continuous (пределы = c (-180, 180), breaks = c (-90, 0, 90, 180)), чтобы получить лучший обзор, показывающий (0, 90, 180, -180) – boyang

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

  • Нет связанных вопросов^_^