Страницы

Поиск по вопросам

вторник, 7 января 2020 г.

Сохранение пропорциональности графиков в R (radial.pie)

#r #graph


Не в первой сталкиваюсь с такой проблемой, но решения пока не нашел.

Я строю четыре графика отображающих процентное соотношение значений четырех переменных. 

library(plotrix)

x1 <- c(0.09,0.187,0.269,0.441,0.013)
x2 <- c(0.207,0.262,0.259,0.242,0.03)
x3 <- c(0.147,0.237,0.249,0.339,0.027)
x4 <- c(0.052,0.11,0.242,0.581,0.015)

df <- cbind(x1, x2, x3, x4)
df1 <- data.frame(df)
df1 <- sqrt(df1)    #Беру корень по значениям, чтобы сектора выглядели более наглядно.

draw_rp <- function(dataf){
  for (i in 1:length(dataf)){
    xnew1 <- c(0.1, 0.1, 0.1, 0.1, 0.1, dataf[[i]])
    colors <- c(rep('white', nrow(dataf)), rainbow(nrow(dataf)))
    radial.pie(xnew1, show.grid = F, clockwise = T, sector.colors = colors)
  }
}

par(mfrow=c(2, 2))
draw_rp(df1)


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

df1
#         x1        x2        x3        x4
#1 0.3000000 0.4549725 0.3834058 0.2280351
#2 0.4324350 0.5118594 0.4868265 0.3316625
#3 0.5186521 0.5089204 0.4989990 0.4919350
#4 0.6640783 0.4919350 0.5822371 0.7622336
#5 0.1140175 0.1732051 0.1643168 0.1224745




Один из выходов это экспортировать графики в картинки. Оставить как есть график,
у которого самое большое значение и пропорционально размерам его секторов уменьшать
все остальные графики. В этом случае 4й график (0.7622336) оставить как есть, а картинки
остальных подгонять под него.

Каким образом можно автоматизировать процесс подгонки, чтобы на выходе я получал
графики с правильными пропорциями?
    


Ответы

Ответ 1



Попробуй добавить в белый сектор max значение из таблицы. ( мне кажется получается то что ты хочешь) draw_rp <- function(dataf){ for (i in 1:length(dataf)){ xnew1 <- c(max(dataf), 0.1, 0.1, 0.1, 0.1, dataf[[i]]) colors <- c(rep('white', nrow(dataf)), rainbow(nrow(dataf))) radial.pie(xnew1, show.grid = F, clockwise = T, sector.colors = colors) } }

Комментариев нет:

Отправить комментарий