Используйте пользовательский значок в круговой диаграмме plotly в R
Мне было интересно, есть ли способ иметь пользовательский значок для круговой диаграммы плотли вместо обычного разделения по кругу
На данный момент я отображаю гендерную информацию с помощью круговой диаграммы, которая выглядит следующим образом:
Я пытаюсь сделать так, чтобы это выглядело как гендерный сюжет в ссылке ниже:
Сюжетный код выглядит следующим образом:
plot_ly(genderselection, labels = ~Gender, values = ~Freq, type = 'pie') %>%
layout(title = paste0("Gender Distribution of Patients from Boston"),
xaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE),
yaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE),
legend=list(orientation='h'))
Фрейм данных выбора пола:
Gender Freq
F 70
M 65
Если не использовать plotly, есть ли какая-либо другая библиотека, которая может использоваться для отображения информации с помощью пользовательских значков ?
1 ответ:
(1) Загрузите файл png, доступный здесь, и сохраните его в своем рабочем каталоге как
man_woman.png
(2) выполните следующий код:library(png) library(plotly) genderselection <- read.table(text=" Gender Freq F 70 M 30 ", header=T) pcts <- round(prop.table(genderselection$Freq)*100) # Load png file with man and woman img <- readPNG("man_woman.png") h <- dim(img)[1] w <- dim(img)[2] # Find the rows where feet starts and head ends pos1 <- which(apply(img[,,1], 1, function(y) any(y==1))) mn1 <- min(pos1) mx1 <- max(pos1) pospctM <- round((mx1-mn1)*pcts[2]/100+mn1) pospctF <- round((mx1-mn1)*pcts[1]/100+mn1) # Fill bodies with a different color according to percentages imgmtx <- img[h:1,,1] whitemtx <- (imgmtx==1) colmtx <- matrix(rep(FALSE,h*w),nrow=h) midpt <- round(w/2)-10 colmtx[mx1:pospctM,1:midpt] <- TRUE colmtx[mx1:pospctF,(midpt+1):w] <- TRUE imgmtx[whitemtx & colmtx] <- 0.5 # Plot matrix using heatmap and print text labs <- c(paste0(pcts[2], "% Males"),paste0(pcts[1], "% Females")) ax <- list(ticks='', showticklabels=FALSE, showgrid=FALSE, zeroline=FALSE) p <- plot_ly(z = imgmtx, showscale=FALSE, type='heatmap', width = 500, height = 500) %>% add_text(x = c(100,250), y = c(20,20), type='heatmap', mode="text", text=labs, showlegend=FALSE, textfont=list(size=20, color="#FFFFFF"), inherit=FALSE) %>% layout(xaxis = ax, yaxis = ax) p