add support for stem plots
まだ誰も着手していません。
- 主要言語
- Python
- スター
- 18.8k
- フォーク
- 2.8k
- 平均マージ
- 16時間 26分
- マージ済み PR(30日)
- 21
説明
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()
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
まず、既存の go.Scatter エントリポイントと、Plotly がマーカーおよび線のスタイルをどのように表現しているかを調べます。Issue ではリポジトリのファイルやテストは指定されておらず、API の選択も未定です。完了条件は、x 軸まで stem を描画し、マーカーを配置し、マーカーと線のカスタマイズをサポートするネイティブな stem-plot インターフェースです。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- python
- 領域
- data-visualization
- issue の種類
- 機能追加
- 難易度
- 5/5
- 見積もり時間
- 1週間以上
- 活発さ
- 停滞
- 明瞭さ
- 説明が足りない
- 初心者へのやさしさ
- 30/100