如何在R中的堆叠条形图顶部显示总值

如何在R中的堆叠条形图顶部显示总值,r,annotations,plotly,R,Annotations,Plotly,我有一个数据框,从中堆叠的条形图被绘制在R中 myDF <- data.frame("group" = c("A","B","C","A","B","C"), "date" = c("25-May","25-May","25-May"

我有一个数据框,从中堆叠的条形图被绘制在R中

myDF <- data.frame("group" = c("A","B","C","A","B","C"),
                    "date" = c("25-May","25-May","25-May","01-Jun","01-Jun","01-Jun"),
                     "hours" = c(42,48,51,32,25,48),
                      stringsAsFactors = FALSE)

p <- plot_ly(myDF, x = myDF$date,
        y = myDF$group,
        type = 'bar',
        name = myDF$group,
        text = myDF$Hours,
        color = myDF$group,
        colors = brewer.pal(length(unique(myDF$group)),
                            "Paired"))%>%
  layout(barmode = 'stack',hoverlabel = list(bgcolor= 'white') ,bargap = 0.5) %>%
  layout(xaxis = list(categoryorder = 'array',
                      categoryarray = myDF$date), showlegend = F)
myDF%
布局(xaxis=list(categoryorder='array',
categoryarray=myDF$日期),showlegend=F)
我有另一个数据框,其中我有一周的总小时数,如下所示:

totalHours <- data.frame(
                          "date" = c("25-May","01-Jun"),
                           "hours" = c(141,105))

totalHours您可以试试这个。这是标签位置的问题:

library(plotly)
library(RColorBrewer)
#Data
myDF <- data.frame("group" = c("A","B","C","A","B","C"),
                   "date" = c("25-May","25-May","25-May","01-Jun","01-Jun","01-Jun"),
                   "hours" = c(42,48,51,32,25,48),
                   stringsAsFactors = FALSE)
#Plot
p <- plot_ly(myDF, x = myDF$date,
             y = myDF$group,
             type = 'bar',
             name = myDF$group,
             text = myDF$Hours,
             color = myDF$group,
             colors = brewer.pal(length(unique(myDF$group)),
                                 "Paired"))%>%
  layout(barmode = 'stack',hoverlabel = list(bgcolor= 'white') ,bargap = 0.5) %>%
  layout(xaxis = list(categoryorder = 'array',
                      categoryarray = myDF$date), showlegend = F)
#Data2
totalHours <- data.frame(
  "date" = c("25-May","01-Jun"),
  "hours" = c(141,105),stringsAsFactors = F)

#Create global coordinate
labs <- myDF %>% group_by(group) %>% mutate(Tot = sum(hours),Prop=hours/Tot) %>% 
  ungroup() %>% summarise(Val=sum(Prop))
#Annotate
annotations <- list()
for (i in 1:length(totalHours$hours)) {
  annotations[[i]] <- list(x = totalHours$date[[i]],
                           y = labs$Val,
                           text = totalHours$hours[[i]],
                           yanchor='bottom',
                           showarrow = FALSE)
}
#Final plot
p <- p %>% layout(annotations = annotations)
library(plotly)
图书馆(RColorBrewer)
#资料
多年筹资框架%
布局(xaxis=list(categoryorder='array',
categoryarray=myDF$日期),showlegend=F)
#数据2
总小时数百分比变化(总小时数=总小时数,总小时数=小时数/总小时数)%>%
解组()%>%摘要(Val=sum(Prop))
#注释

注释全局坐标的用途到底是什么?当我尝试使用其他数据时,会显示标签randomly@NevedhaAyyanar对不起,我把你弄糊涂了。它是一个基于所有组的比例的累积值。您可以使用分组变量,如
group
date
来计算y值。是否有可能使用单个数据帧而不是使用两个数据帧来实现这一点?@nevedhayanar您可以围绕相同的
myDF
进行计算,并将值存储在新列中,然后选择请仔细检查注释中
y
的值。我不太清楚如何确定注释中
y
的值。它在绘图的中心显示标签,而不是在顶部显示
p <- p %>% layout(annotations = annotations)
library(plotly)
library(RColorBrewer)
#Data
myDF <- data.frame("group" = c("A","B","C","A","B","C"),
                   "date" = c("25-May","25-May","25-May","01-Jun","01-Jun","01-Jun"),
                   "hours" = c(42,48,51,32,25,48),
                   stringsAsFactors = FALSE)
#Plot
p <- plot_ly(myDF, x = myDF$date,
             y = myDF$group,
             type = 'bar',
             name = myDF$group,
             text = myDF$Hours,
             color = myDF$group,
             colors = brewer.pal(length(unique(myDF$group)),
                                 "Paired"))%>%
  layout(barmode = 'stack',hoverlabel = list(bgcolor= 'white') ,bargap = 0.5) %>%
  layout(xaxis = list(categoryorder = 'array',
                      categoryarray = myDF$date), showlegend = F)
#Data2
totalHours <- data.frame(
  "date" = c("25-May","01-Jun"),
  "hours" = c(141,105),stringsAsFactors = F)

#Create global coordinate
labs <- myDF %>% group_by(group) %>% mutate(Tot = sum(hours),Prop=hours/Tot) %>% 
  ungroup() %>% summarise(Val=sum(Prop))
#Annotate
annotations <- list()
for (i in 1:length(totalHours$hours)) {
  annotations[[i]] <- list(x = totalHours$date[[i]],
                           y = labs$Val,
                           text = totalHours$hours[[i]],
                           yanchor='bottom',
                           showarrow = FALSE)
}
#Final plot
p <- p %>% layout(annotations = annotations)