[英]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.