add_text() interferes with plot's color animation
Nobody has claimed this yet.
- Dominant language
- R
- Stars
- 2.7k
- Forks
- 641
- PR merge metrics
- No merged PRs in 30d
Description
I have a gauge plot (following this tutorial), with the color of the plot changing according to the current value. I also want an annotation* which displays the current value of the gauge (I don't want the standard value displayed in the sector).
I tried the following:
library(plotly)
library(RColorBrewer)
riskToHex <- function(x) {
x <- colorRamp(rev(brewer.pal(11, "RdYlBu")))(x / 100)
rgb <- paste(x[,1], x[,2], x[,3], sep = ",")
paste0("rgb(", rgb, ")")
}
dd <- data.frame(values = c(90, 60, 20))
dd <- dd %>%
mutate(colors = riskToHex(dd$values),
frame = seq.int(nrow(dd)))
dd <- merge(dd, data.frame(values = 200 - dd$values,
colors = "white",
frame = dd$frame),
all = TRUE) %>%
arrange(frame)
plot_ly() %>%
add_pie(values = dd$values,
frame = dd$frame,
rotation = -90,
marker = list(colors = dd$colors),
textinfo = "none",
title = list(text = "Risk score",
font = list(size = 20)),
hoverinfo = "skip",
sort = FALSE,
showlegend = FALSE,
order = "clockwise",
hole = 0.6) %>%
add_markers(x = 0,
y = c(0, 1),
color = 'rgba(0,0,0,1)') %>%
add_text(x = 0,
y = 0.6,
yshift = 100,
text = filter(dd, colors != "white")$values,
frame = distinct(dd, frame)[[1]],
showlegend = FALSE,
textfont = list(size = 20)) %>%
animation_opts(frame = 500) %>%
layout(
xaxis = list(showgrid = FALSE,
zeroline = FALSE,
showticklabels = FALSE
),
yaxis = list(showgrid = FALSE,
zeroline = FALSE,
showticklabels = FALSE
)
)
This is rather messy and very hacky. I had to use add_text() because I couldn't figure out how to get annotations to work in this case with changing values in each frame (whether through add_annotations or layout(annotations = ...)). Unfortunately, the add_text() forced me to add the layout block disabling the axes (which otherwise start to appear). And since the pie chart is seemingly printed on paper space, I also had to add two invisible points so that I could actually position the text (otherwise the axes would always keep the text centered).
Regardless, this successfully generates an animated chart. However, the color only seems to change to the correct value on the following frame (by which time it's too late).
Howeverf, this only happens due to the add_text() block. If I comment that out, the colors on the bar work correctly.
Is there any explanation and solution to this?
* I'm open to other solutions!
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the reproducible R example in the issue and compare the animation with and without add_text(). Investigate why the pie colors lag when text is present; done means the gauge color and displayed value update on the same frame without requiring the axis workaround.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- r
- Domain
- data-visualization
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 25/100

