Plotly: Как построить две строки из двух столбцов данных и назначить наведенную информацию из двух других столбцов? - PullRequest
1 голос
/ 24 февраля 2020

Как построить два линейных графика из двух столбцов информационного кадра, а также где другой отдельный столбец обозначает ось, а еще два столбца обозначают значения наведения (всплывающая подсказка) первых двух столбцов?

Ответы [ 2 ]

0 голосов
/ 25 февраля 2020

Используя go.Scatter, вы можете отобразить любой столбец данных y=df['A'] в виде строки со связанным индексом x=df.index и назначить любой столбец pandas данных в качестве источника hoverinfo, используя hovertext=df['A_info'], чтобы получить это:

enter image description here

Полный код:

import pandas as pd
import plotly.graph_objects as go

# sample data
d={'A':[3,3,2,1,5],
   'B':[4,4,1,4,7],
   'A_info':['nothing', '', '', 'bad', 'good'],
   'B_info':['', '', 'bad', 'better', 'best']}

# pandas dataframe
df=pd.DataFrame(d, index=[10,11,12,13,14])

# set up plotly figure
fig = go.Figure()

# add line / trace 1 to figure
fig.add_trace(go.Scatter(
    x=df.index,
    y=df['A'],
    hovertext=df['A_info'],
    hoverinfo="text",
    marker=dict(
        color="blue"
    ),
    showlegend=False
))

# add line / trace 2 to figure
fig.add_trace(go.Scatter(
    x=df.index,
    y=df['B'],
    hovertext=df['B_info'],
    hoverinfo="text",
    marker=dict(
        color="green"
    ),
    showlegend=False
))

fig.show()
0 голосов
/ 24 февраля 2020

У меня есть несколько рабочих примеров:

Простой двухстрочный метод построения графика - просто вызвать .plot () на фрейме данных.

import matplotlib.pyplot as plt
dataframe[["Col_1", "Col_2"]].plot()

Не уверен насчет интерактивных всплывающих подсказок, но если вы хотите добавить маркеры значков, вот пример выполнения pandas запрос к фрейму данных, используя plt.plot(x,y) и обрабатывая индекс как x

fig = plt.figure(figsize=(20,10))
ax1 = fig.add_subplot(111, ylabel="Price")

dataframe[["Close_Price", "21_day_SMA", "34_day_SMA"]].plot(ax=ax1)

ax1.plot( dataframe["Close_Price"][ dataframe['Trade_Call'] == 'BUY' ].index, 
          dataframe["Close_Price"][ dataframe['Trade_Call'] == 'BUY' ], 
          '^', markersize=15, color='g' )

ax1.plot( dataframe["Close_Price"][ dataframe['Trade_Call'] == 'SELL' ].index, 
          dataframe["Close_Price"][ dataframe['Trade_Call'] == 'SELL' ], 
          'v', markersize=15, color='r' )

Прочитайте документацию plt.plot()

...