问题描述
我很难在正确的位置添加注释。我想要第一个在包含“关键”的栏中间设置“关键”,并在该栏中间设置“重要”。我试图改变对齐方式,我已经看了太多不同的例子,这让我感到困惑。我假设需要更改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)
输出: