首页 > 解决方案 > 添加 tickformat=% 时,图表值已乘以 100

问题描述

我有下面的堆积条,其中除了轴中的值和似乎已乘以 100 的悬停文本之外,一切正常。我试图通过将初始值除以来欺骗它,100但后来我取回了舍入值(20而不是19.8)。我认为这是在我添加之后发生的tickformat=%

# data
Category<-c("First dose","Full vaccination")
`Uptake first dose`<-c(19.8,0)
`Uptake full vaccination`<-c(0,7.6)
`Not vaccinated`<-c(80.2,92.4)
ch5<-data.frame(Category,`Uptake first dose`,`Uptake full vaccination`,`Not vaccinated`)

# transform data
data.long <- ch5 %>%
  pivot_longer(cols = -Category,
               names_to = "vac",
               values_to = "percent") %>%
  mutate(vac = str_replace_all(vac, "\\.", " "),
         vac = fct_rev(factor(vac))) 

# add plot
plot_ly(data.long) %>%
  add_bars(y = ~Category,
           x = ~percent,
           color = ~vac,
           text = ~vac,
           colors = c("#458d35", "#63bb47", "#e6e7e8"),
           hovertemplate = paste('<b>%{y}</b>',
                                 '<br>%{text}: %{x} ',
                                 '<extra></extra>')) %>%
  layout(font = list(color = '#a2a2a2'),barmode = "stack",
         bargap = 0.7,
         yaxis = list(fixedrange = TRUE,autorange="reversed",
                      title = "",
                      showticklabels = FALSE,
                      showgrid = FALSE,
                      showline = FALSE,
                      zeroline = FALSE),
         xaxis = list(fixedrange = TRUE,title = "",
                      tickformat = "%",
                      
                      zeroline = FALSE,
                      showgrid = FALSE),
         
         hoverlabel = list(bgcolor = "black",
                           bordercolor = "black",
                           font = list(color = "white")),
         shapes = list(type = "line",
                       y0 = 0, y1 = 1, yref = "paper",
                       x0 = 70, x1 = 70),
         annotations = list(text = "Target (70%)",
                            showarrow = FALSE,
                            x = 70,
                            y = 1.05,
                            yref = "paper"),
         legend = list(orientation = 'h'))

标签: rplotly

解决方案


使用ticksuffix = '%'.

library(plotly)

plot_ly(data.long) %>%
  add_bars(y = ~Category,
           x = ~percent,
           color = ~vac,
           text = ~vac,
           colors = c("#458d35", "#63bb47", "#e6e7e8"),
           hovertemplate = paste('<b>%{y}</b>',
                                 '<br>%{text}: %{x} ',
                                 '<extra></extra>')) %>%
  layout(font = list(color = '#a2a2a2'),barmode = "stack",
         bargap = 0.7,
         yaxis = list(fixedrange = TRUE,autorange="reversed",
                      title = "",
                      showticklabels = FALSE,
                      showgrid = FALSE,
                      showline = FALSE,
                      zeroline = FALSE),
         xaxis = list(fixedrange = TRUE,title = "",ticksuffix = '%',
                      zeroline = FALSE,
                      showgrid = FALSE),
         
         hoverlabel = list(bgcolor = "black",
                           bordercolor = "black",
                           font = list(color = "white")),
         shapes = list(type = "line",
                       y0 = 0, y1 = 1, yref = "paper",
                       x0 = 70, x1 = 70),
         annotations = list(text = "Target (70%)",
                            showarrow = FALSE,
                            x = 70,
                            y = 1.05,
                            yref = "paper"),
         legend = list(orientation = 'h'))

在此处输入图像描述


推荐阅读