plotly / plotly/plotly.R

Grouping by color and/or symbol changes the order of error_y bars

Open
#1,657 3 comments 4 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug priority: high
Dominant language
R
Stars
2.7k
Forks
641
PR merge metrics
No merged PRs in 30d

Description

Reopening issues #762 and #1110, this is still happening in 2019 and maybe I found the cause.
Briefly, error bars displayed by error_x and error_y appear in the wrong order when grouping data by color or (as I found) symbol. Recycling @Cristoforetti 's code from #1110:

df<-data.frame("X"=c(1:20),
"Y"=c(1:20),
"SD"=c(1:20),
"G"=c(rep("A",3),rep("B",5),rep("C",4),rep("D",5),rep("A",3)),
"g"=c(rep("a",2),rep("b",5),rep("c",4),rep("d",5),rep("e",4))
)
# no grouping; error bars correct
p1<-plot_ly(df,
            x=~X,
            y=~Y,
            type="scatter",
            mode="markers",
            error_y =list(
              array=~SD,
              thickness=1
            )
)
# grouping by color; error bars wrong
p2<-plot_ly(df,
            x=~X,
            y=~Y,
            color=~G,
            type="scatter",
            mode="markers",
            error_y =list(array=~SD,
                          thickness=1
            )
)
subplot(p1,p2)

image
I found that the correct behaviour (error bars associated with the correct data points) can be restored by passing a version of the input dataframe order-ed by the color column:

# ordering the input data frame by the color column yields the correct behaviour
p3<-plot_ly(df[order(df$G),],
            x=~X,
            y=~Y,
            color=~G,
            type="scatter",
            mode="markers",
            error_y =list(array=~SD,
                          thickness=1
            )
)
subplot(p1,p2,p3)

image
The same happens when ordering by symbol: the error bars are screwed up unless df is order-ed by the symbol column. When using both color and symbol, one must order by both the color column and the symbol column in this order:

# using "G" for color and "g" for symbols; ordering by G, then g yields the correct behaviour
p4<-plot_ly(df[order(df$G,df$g),],
            x=~X,
            y=~Y,
            symbol=~g,
            color=~G,
            type="scatter",
            mode="markers",
            error_y =list(array=~SD,
                          thickness=1
            )
)
# ordering by g, then G yields the wrong behaviour
p5<-plot_ly(df[order(df$g,df$G),],
            x=~X,
            y=~Y,
            symbol=~g,
            color=~G,
            type="scatter",
            mode="markers",
            error_y =list(array=~SD,
                          thickness=1
            )
)
subplot(p4,p5)

image

What seems to be happening here is that color and symbol are reordering the (copy of) df handled by plotl_ly, but for some reason the reordering only affects the columns identified by x, y, color and symbol; as a consequence, the column used by error_y is now in the wrong order, and error bars are associated with the wrong data points. Ordering the df prior to calling plot_ly, or passing an ordered version of it, solves the issue. Still, it would be great to see this fixed in future versions of plotly.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by running the reproducible plot_ly and subplot examples using the supplied data frame, comparing grouped and pre-ordered inputs. Trace the grouping behavior for color and symbol and verify that error_y values remain associated with their original points; done means the error bars stay correctly aligned without requiring manual ordering.

Written by the indexing model from the issue text.

Assessment

Tech stack
plotly, r
Domain
data-visualization
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.