R:在Plotly中注释一个barplot

问题描述

我很难在正确的位置添加注释。我想要第一个在包含“关键”的栏中间设置“关键”,并在该栏中间设置“重要”。我试图改变对齐方式,我已经看了太多不同的例子,这让我感到困惑。我假设需要更改add_annotation(x =)。带注释的行是我已更改或尝试但未成功的事情。感谢您所做的任何输入,它们都可以指引我正确的方向,而无需直接给我答案。

library(plotly)

levels <-c("Critical","Somewhat_Important","Not_Important")
y<-c("Predictive Maintenance","Security","Self organizing networks","Network Management","Fraud Assurance","Data Monetization","CEM")
Predictive_Maintenance <-c(92,8,0)
Security <-c(75,17,8)
Self_organizing_networks <-c(67,33,0)

Network_Management <-c(58,42,0)

Fraud_revenue_assurance <-c(58,0)

Data_Monetization <-c(42,50,8)

CEM <-c(42,8)


ML_Use_cases <-data.frame(rbind(
                      Predictive_Maintenance,Security,Self_organizing_networks,Network_Management,Fraud_revenue_assurance,Data_Monetization,CEM
                      )
)

colnames(ML_Use_cases)<-levels
ML_Use_cases$levels <- factor(ML_Use_cases$levels,levels = c("Critical","Somewhat Important","Not important")) 
fig <- plot_ly(ML_Use_cases,x = ~Critical,y = ~y,type = 'bar',orientation = 'h',name = "Critical",marker = list(color = 'rgba(216,101,34,0.8)',line = list(color = 'rgba(216,width = 3)))
fig <- fig %>% add_trace(x = ~Somewhat_Important,name = "Somewhat Important",131,82,width = 3),textposition="auto"))
fig <- fig %>% add_trace(x = ~Not_Important,name = "Not important",184,166,0.85)',textposition="auto"))


fig <- fig %>% layout(barmode = 'stack',xaxis = list(title = ""),yaxis = list(title =""))


fig <- fig %>% add_annotations(xref = 'x',yref = 'y',# x = Security,y = levels,text = paste(ML_Use_cases[,"Critical"],'%'),textposition ="inside left",font = list(family = 'San Serif',size = 12,color = 'rgb(248,248,255)',align="center"),showarrow = FALSE) 
#fig <- fig %>% add_annotations(xref = 'x',#x = Self_organizing_networks +Security,y = y,#                              text = paste(ML_Use_cases[,"Somewhat_Important"],#                            # textposition ="inside left",#                           font = list(family = 'San Serif',#                                        color = 'rgb(248,align="left"),#                             showarrow = FALSE) 


fig%>% layout(paper_bgcolor='#3F3A38',plot_bgcolor='#3F3A38',catagoryorder="ML_Use_Case",font = list(
           family = "San Serif",color="#ffffff",size=16
      
  )

)

解决方法

我建议您使用一种融合数据的方法,并且使用完全定义的变量很容易。基本上,您可以转换数据,并让变量包含所有组以及行的ID名称。您可以根据需要进一步设置颜色的格式。接下来的代码:

library(plotly)
library(reshape2)
library(RColorBrewer)

#Data
levels <-c("Critical","Somewhat_Important","Not_Important")
y<-c("Predictive Maintenance","Security","Self organizing networks","Network Management","Fraud Assurance","Data Monetization","CEM")
Predictive_Maintenance <-c(92,8,0)
Security <-c(75,17,8)
Self_organizing_networks <-c(67,33,0)

Network_Management <-c(58,42,0)

Fraud_revenue_assurance <-c(58,0)

Data_Monetization <-c(42,50,8)

CEM <-c(42,8)


ML_Use_cases <-data.frame(rbind(
  Predictive_Maintenance,Security,Self_organizing_networks,Network_Management,Fraud_revenue_assurance,Data_Monetization,CEM
)
)

colnames(ML_Use_cases)<-levels
#Assing rownames as ids
ML_Use_cases$id <- rownames(ML_Use_cases)
rownames(ML_Use_cases) <- NULL

现在,我们通过融合并定义级别的顺序来格式化数据:

#Melt data
Melted <- melt(ML_Use_cases,id.vars = 'id')
Melted$variable <- as.character(Melted$variable)
Melted$variable <- factor(Melted$variable,levels = rev(c("Not_Important","Critical","Somewhat_Important")),ordered = T)

然后,我们绘制情节草图:

f2 <- plot_ly(Melted,x = Melted$value,y = Melted$id,type = 'bar',name = Melted$variable,text = paste0(Melted$value,'%'),color = Melted$variable,colors = brewer.pal(length(unique(Melted$variable)),"Paired"))%>%
  layout(barmode = 'stack',hoverlabel = list(bgcolor= 'white'),bargap = 0.5) %>%
  layout(xaxis = list(categoryorder = 'array',categoryarray = Melted$id),showlegend = T)

输出:

enter image description here

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...