Страница 1 из 1

Вопрос с радиальными диаграмами

Добавлено: 17 фев 2016, 04:34
neroznik
Добрый день.
Подскажите, возможно ли осуществить следущее в R? Есть табличные данные где указаны процент растительного покрова определенных мест и их Aspect (не уверен с переводом на русский, наверное "направление по сторонам света"). Aspect дан в градусах. Возникла идея сделать радиальную диаграмму, где сама окружность будет являться Aspect-ом, а растительный покров - самой диаграмой. Что-то вроде такого (нарисовал в paint на скорую руку)
Спойлер
Изображение
Возможно ли что-то подобное осуществить в R?
Честно говоря гугл не помог с поиском скрипта для создания радиальных диаграмм в R (только пироги да коробки), поэтому за подсказку буду тоже очень благодарен.

Re: Вопрос с радиальными диаграмами

Добавлено: 17 фев 2016, 11:09
gamm
neroznik писал(а):возможно ли осуществить следущее в R?
там все возможно, для вашего случая хватит команды plot() и учебника геометрии за 7 класс (или когда там нынче синусы/косинусы проходят), чтобы данные подготовить. Скрип готовый вряд ли кто для вас написал ...

Re: Вопрос с радиальными диаграмами

Добавлено: 17 фев 2016, 23:27
sergsh
Попробуйте набрать в поисковике "R circle diagram"
и далее нажимайте "Картинки по запросу r circle"

там будет много разных круговых диаграмм, и возможно что-то вам подойдет ...

Re: Вопрос с радиальными диаграмами

Добавлено: 18 фев 2016, 02:51
Иван Стрельников
Для таких целей подходит пакет circular.

На всякий случай, может кому пригодится. Для задач, когда нужно много чего поворачивать на заданный угол, для меня лично, находкой стали матрицы вращения.
Пример:

Код: Выделить всё

rot_mat <- function(x, y, ang){
	ang <- ang*pi / 180 # градусы в радианы
	mat <- matrix(c(cos(ang), -sin(ang), sin(ang), cos(ang)), 2) # собственно матрица
	xy <- mat %*% matrix(c(x, y),2) # произведение матриц
	return(as.numeric(xy))
}

# Наши данные
set.seed(22222)
Data<-data.frame(Veg=c(rnorm(10, mean=5)), Aspect=seq(0,270, by=30))

# Поворачиваем все
Circ_data<-apply(Data, 1, function(x){rot_mat(0,x[1],x[2])})
# Наносим на график
plot(t(Circ_data))
polygon(t(Circ_data))
Вообще удобно, если данные трехмерные (матрицу, естественно нужно допилить до трехмерного варианта).