r - R:在 Plotly 中注释条形图
问题描述
我很难将注释放在正确的位置。我想要第一个在包含“Critical”的条中间设置“Critical”,在该条中间设置“Somewhat Important”。我试过改变对齐方式,我看了这么多不同的例子,我很困惑。我假设它是需要更改的 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)
输出:
推荐阅读
- python - 如何在另一个 Dataframe 上添加具有条件的列?
- aes - AES-128-CBC 解密返回错误值
- amazon-web-services - 防火墙:当出站规则已经存在时,从服务器获取 SYN-ACK 是否需要入站规则?
- mongodb - MongoDB $expr 比较数组中的字段
- python - 未附加列表
- php - 段落标签和换行的phpBB代码是什么
- sql - 创建名为 PRESENTER 的表 - 遇到错误 ORA-00907
- r - 根据其阶段 wrt Dates 创建一个新列
- c# - 在 Windows 7 上使用 WIA 扫描多个页面
- excel - 在 Sharepoint List Online 上将文件 Excel 转换为 CSV