Plotly: как построить несколько линий с общей осью x? - PullRequest
3 голосов
/ 05 августа 2020

Я хотел бы иметь многострочный график на одном холсте, связанный с той же осью x, как показано на рисунке :

введите описание изображения здесь

Использование подзаголовков не приводит к желаемому результату.

import plotly.express as px
from plotly.subplots import make_subplots
import plotly.graph_objects as go

fig = make_subplots(rows=2, shared_xaxes=True,vertical_spacing=0.1)
fig.add_scatter(y=[2, 1, 3], row=1, col=1)
fig.add_scatter(y=[1, 3, 2], row=2, col=1)
fig.show()

Могу я узнать, как это можно сделать, спасибо, если кто-то может указать на хороший материал для чтения

Ответы [ 2 ]

4 голосов
/ 05 августа 2020

С таким набором данных, как this , вы можете выбрать любое количество столбцов, настроить число, используя fig = make_subplots() с shared_xaxes, установленным на True, а затем добавить свою серию с общим x- ось, используя fig.add_trace(go.Scatter(x=df[col].index, y=df[col].values), row=i, col=1) в al oop, чтобы получить это:

введите описание изображения здесь

Сообщите мне, можно ли эту настройку использовать, но нужно немного настроить.

Полный код:

import plotly.graph_objects as go
import plotly.io as pio
from plotly.subplots import make_subplots
import pandas as pd

# data
pio.templates.default = "plotly_white"
df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv')
df = df.set_index('Date')
df.tail()
cols = df.columns[:-4]
ncols = len(cols)

# subplot setup
fig = make_subplots(rows=ncols, cols=1, shared_xaxes=True)

for i, col in enumerate(cols, start=1):
    fig.add_trace(go.Scatter(x=df[col].index, y=df[col].values), row=i, col=1)
    
fig.show()
1 голос
/ 05 августа 2020

В зависимости от данных, которые вы рисуете, я думаю, вы могли бы проверить «Составные подзаголовки с общей осью X (низкоуровневый API)» на https://plotly.com/python/subplots/

Или разделите данные, сдвинув каждый линейный график вверх, например:

import plotly.graph_objects as go
import random


data = []
n = 9

for x in range(10, 60, 10):

  points = [value + x for value in random.sample(range(1,n+1), k = n)]
  
  data.append(go.Scatter(y=points))

fig = go.Figure(data = data)

fig.show()
...