r - 在R中的plotly饼图中使用自定义图标

标签 r ggplot2 shiny plotly ggplotly

我想知道是否有一种方法可以为plotly的饼图提供自定义图标,而不是通常的饼图划分

到目前为止,我使用饼图显示性别信息,如下所示:

enter image description here

我试图让它看起来像下面链接中的性别图:

https://app.displayr.com/Dashboard?id=c1506180-fe64-4941-8d24-9ec4a54439af#page=3e133117-f3b2-488b-bc02-1c2619cf3914

enter image description here

绘图代码如下:

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) 下载可用的png文件here并将其保存在您的工作目录中,名称为 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

enter image description here

关于r - 在R中的plotly饼图中使用自定义图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46586964/

相关文章:

r - 如何突出显示 includeHTML 显示的文本

r - 在 R 中处理具有相同 Id(键)列值的多行

r - R Markdown中的图形大小

r - ObserveEvent 中 Shiny 的应用程序错误? [.default : invalid subscript type 'list' 中的错误

r - 没有轴或网格的 ggplot2 主题

r - 在 R 中的网格中模拟二维随机游走并使用 ggplot 绘图

R Shiny "R_ZIPCMD"路径压缩错误

r - 如果输出是 html 或 Latex,如何在 R 中的 bookdown 中执行不同的操作

r - GGpairs,相关值未对齐

r - grid.arrange 中图之间的边距