plotly / plotly/plotly.py

Cannot increase distance between shape and its label outside of the object

Open
#4,971 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

feature P3
Dominant language
Python
Stars
18.8k
Forks
2.8k
Avg merge
16h 26m
Merged PRs (30d)
21

Description

Challenge

I would like to draw a shape using the label argument to position the label outside of the shape. Unfortunately, the label always touches the shape and padding only works in one direction: towards the center of the shape.

Here is an example:

import plotly.graph_objects as go

fig = go.Figure()

for i in range(0, 4):
    fig.add_shape(
        go.layout.Shape(
            type="rect",
            x0=10,
            y0=10*i + 3,
            x1=15,
            y1=10*i + 10,
            label={
                "text": f"Padding: {i*10}px",
                "textposition": "middle right",
                "xanchor": "left",
                "yanchor": "middle",
                "padding": i*10,
            },
        )
    )

fig.update_layout(xaxis_range=[0, 20], yaxis_range=[0, 60])

fig.show()

Despite seting xanchor="left" and textposition="middle right", the label barely touches the shape (for padding=0) and with increasing padding the label always moves towards the center.

Image

Setting padding to a negative value seems not to be allowed:

ValueError: 
    Invalid value of type 'builtins.int' received for the 'padding' property of layout.shape.label
        Received value: -10

    The 'padding' property is a number and may be specified as:
      - An int or float in the interval [0, inf]

Expected Behavior

Either infer from anchor and textposition, if a label should be outside of the shape, or allow negative values for padding so that I can increase the distance between the rectangle and the label.

I could not find any other info regarding this observation and I would like to avoid using an annotation as a workaround.

Am I overlooking something or is this a bug?

System Info

python: v3.10.11
plotly: v5.24.1

Working in a VSCode (v1.96.2) notebook and tested multiple different renderers with identical outcome: "vscode", "notebook", "browser".
Same result with write_image and pdf and png.

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 provided go.Figure/add_shape example with the different padding values and renderers. Trace how shape labels handle textposition, xanchor, and padding; the issue is done when labels can be spaced outward from the shape without an annotation workaround, with regression coverage for the demonstrated case.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
data-visualization
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.