2017-10-05 183 views
1

我想知道是否有办法有一个自定义图标plotly的饼图而不是通常的饼师使用自定义图标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

的plotly代码是为下:

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')) 

的genderselection数据帧:

Gender Freq 
    F 70 
    M 65 

如果不使用plotly是存在可用于使用显示信息的任何其它库自定义图标?

回答

2

(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

+0

这正是我一直在寻找为! 谢谢! 有没有办法改变背景为白色和颜色填充? 我确实看到你根据百分比填充了不同颜色的物体,但默认情况下是否填充了颜色?我们可以根据我们的选择来定义颜色吗? –

+1

@DollarVora在这里你可以找到一种方法来控制剧情'heatmap'的调色板:https://stackoverflow.com/questions/44918709/how-to-generate-a-custom-color-scale-for-plotly-热图 –