繁体   English   中英

R:在 Plotly 中注释条形图

[英]R: annotation a barplot in Plotly

我很难将注释放在正确的位置。 我想要第一个在包含“关键”的条形中间设置“关键”,并在该条形中间设置“有点重要”。 我试过改变对齐方式,我看过很多不同的例子,我感到很困惑。 我假设它是需要更改的 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, 42,0)

Data_Monetization <-c(42, 50, 8)

CEM <-c(42, 50, 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, 101, 34, 0.8)',
                                         width = 3)))
fig <- fig %>% add_trace(x = ~Somewhat_Important, name = "Somewhat Important",
                         marker = list(color = 'rgba(216, 131, 82, 0.8)',
                                       line = list(color = 'rgba(216, 101, 34, 0.8)',
                                                   width = 3), textposition="auto"))
fig <- fig %>% add_trace(x = ~Not_Important, name = "Not important",
                         marker = list(color = 'rgba(216, 184, 166, 0.85)',
                                       line = list(color = 'rgba(216, 101, 34, 0.8)',
                                                   width = 3), 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', yref = 'y',
                               #x = Self_organizing_networks +Security, y = y,
 #                              text = paste(ML_Use_cases[,"Somewhat_Important"], '%'),
  #                            # textposition ="inside left",
    #                           font = list(family = 'San Serif', size = 12,
   #                                        color = 'rgb(248, 248, 255)', 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, 42,0)

Data_Monetization <-c(42, 50, 8)

CEM <-c(42, 50, 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)

输出:

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM