Сопоставить тип линии с данными в виде графика с несколькими вспомогательными участками в python - PullRequest
1 голос
/ 28 января 2020

Я пытаюсь отобразить тип линии в столбец категориальных данных в кадре данных pandas на рисунке plotly с несколькими вспомогательными участками.

У меня есть кадр данных df, эквивалентный:

from datetime import datetime
import numpy as np
df = pd.DataFrame({'date':pd.date_range(start='01/01/2020',periods=100),
                   'y_one':np.linspace(1,100,100),
                   'y_two':np.linspace(100,1,100)})
df['today'] = df.date.apply(lambda date: 'the_future' if date > datetime.today() else 'the_past')

Мне нужно нанести несколько строк (y_one, y_two) на date_range. Я хотел бы иметь строки solid для прошлого и пунктирные для будущего, т.е. иметь тип линии, сопоставленный с df['today'].

Код, который я реализовал до сих пор:

import plotly.graph_objects as go
from plotly.offline import plot
fig = go.Figure()
fig.add_trace(
    go.Scatter(
        x=df["date"],
        y=df["y_one"],
        mode="lines",
        line=dict(color='black',
                    )
        )
    )
fig.add_trace(
    go.Scatter(
        x=df["date"],
        y=df["y_two"],
        mode="lines",
        line=dict(color='red'),
        )
    )
plot(fig)

Есть ли способ реализовать этот вариант использования в plotly с несколькими вспомогательными участками?

1 Ответ

1 голос
/ 28 января 2020

Возможно, это не самое элегантное решение, но в конечном итоге вы можете работать с циклами, если у вас есть большое количество столбцов для печати, которые вы можете использовать al oop.

import plotly.graph_objects as go
import pandas as pd
import numpy as np
df = pd.DataFrame({'date':pd.date_range(start='01/01/2020',periods=100),
                   'y_one':np.linspace(1,100,100),
                   'y_two':np.linspace(100,1,100)})

df["is_future"] = df["date"]>pd.datetime.today()

fig = go.Figure()
fig.add_trace(
    go.Scatter(
        x=df[df["is_future"]==False]["date"],
        y=df[df["is_future"]==False]["y_one"],
        mode="lines",
        legendgroup="y_one",
        name = "y_one",
        line=dict(color='black',)))

fig.add_trace(
    go.Scatter(
        x=df[df["is_future"]==True]["date"],
        y=df[df["is_future"]==True]["y_one"],
        mode="lines",
        legendgroup="y_one",
        name = "y_one",
        showlegend=False,
        line=dict(color='black',dash='dash')))

fig.add_trace(
    go.Scatter(
        x=df[df["is_future"]==False]["date"],
        y=df[df["is_future"]==False]["y_two"],
        mode="lines",
        legendgroup="y_two",
        name = "y_two",
        line=dict(color='red'),))

fig.add_trace(
    go.Scatter(
        x=df[df["is_future"]==True]["date"],
        y=df[df["is_future"]==True]["y_two"],
        mode="lines",
        legendgroup="y_two",
        name = "y_two",
        showlegend=False,
        line=dict(color='red', dash='dash'),))


fig.show()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...