plotly / plotly/plotly.py

add support for stem plots

Offen
#4,800 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

feature P3
Vorherrschende Sprache
Python
Sterne
18.8k
Forks
2.8k
Ø Merge
16 Std. 26 Min.
Gemergte PRs (30 T.)
21

Beschreibung

Feature Request: Add support for stem plots

Description:
The stem plot is widely used in MATLAB/Octave/Python(matplotlib.pyplot.stem) to represent discrete data with markers and stems (vertical lines) connecting the data points to the x-axis. It is particularly useful for plotting sampled signals or data that has clear separation along the x-axis.

Currently, Plotly doesn't have a built-in function to replicate the stem plot, but users can manually create similar plots using go.Scatter and adding both lines and markers.

Proposal:
Introduce a native stem plot type that:

  • Draws vertical lines from the x-axis to each data point.
  • Places a marker on each data point.
  • Allows customization of marker and line styles (similar to MATLAB).

Why it’s useful:

  • It simplifies the creation of a common plot type in scientific and engineering fields.
  • It would improve ease of use for users transitioning from MATLAB/Octave.

Examples:
Below is an example of how users can manually create a stem plot using Plotly’s go.Scatter, but it would be nice if this kind of function could be called as go.Scatter, by passing some parameter to transform in stem plot, or if we could call a function from plotly:

import plotly.graph_objects as go

# Counter for creating unique legend groups if not passed
legendgroup_cnt = 0

# Function to create a stem plot in Plotly
# x: data for the x-axis
# y: data for the y-axis (x and y must have the same number of elements)
# fig: if passed, plots on the given figure, otherwise creates a new one
# marker_symbol: allows changing the marker style (see options at https://plotly.com/python/marker-style/)
# color: the color of the marker and lines
# legendgroup: allows creating a group of legends with the same name
def stem_plot(x, y, fig=[], name='plot', color="blue", marker_symbol='circle-open', legendgroup=[]):
    global legendgroup_cnt

    # If fig is empty, create a new figure
    if fig == []:
        fig = go.Figure()

    # If legendgroup is not provided, create a new legendgroup for each curve
    if legendgroup == []:
        legendgroup = legendgroup_cnt
        legendgroup_cnt += 1

    # Create a scatter trace for markers
    scatter_trace = go.Scatter(
        x=x, y=y, mode='markers',
        marker_symbol=marker_symbol,
        marker=dict(size=14, color=color),
        name=name, legendgroup=legendgroup
    )
    fig.add_trace(scatter_trace)

    # Create a line connecting markers to the x-axis
    for xi, yi in zip(x, y):
        line_trace = go.Scatter(
            x=[xi, xi], y=[0, yi], mode='lines',
            line=dict(color=scatter_trace.marker.color),
            name=name, showlegend=False, legendgroup=legendgroup
        )
        fig.add_trace(line_trace)

    return fig

# using the function
x = np.arange(0,10,1)
y = 2*x
fig = stem_plot(x, y, fig=[], name='mystem', color="blue", marker_symbol='circle-open', legendgroup=[])
fig.show()

plot-stem

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginnen Sie mit der Untersuchung des vorhandenen go.Scatter-Einstiegspunkts und der Darstellung von Marker- und Linienformatierung durch Plotly. Das Issue nennt keine Repository-Dateien oder Tests und lässt die Wahl der API offen; abgeschlossen wäre die Arbeit mit einer nativen Stem-Plot-Schnittstelle, die Stems bis zur x-Achse zeichnet, Marker platziert und die Anpassung von Markern und Linien unterstützt.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python
Bereich
data-visualization
Issue-Typ
Feature
Schwierigkeit
5/5
Geschätzter Aufwand
Über eine Woche
Aktivitätsstatus
Veraltet
Klarheit
Muss geklärt werden
Anfängerfreundlichkeit
30/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.