Как объединить диаграмму и таблицу в одно графическое изображение

Я успешно создал графическое изображение гистограммы со следующим фрагментом кода:

chart = go.Figure(data=chart_matrix)

И успешно создали второе графическое изображение таблицы со следующим фрагментом кода:

trace_table = go.Table(
    type='table',
    header=dict(values=table_title),
    cells=dict(values=sorted_matrix)
)

Теперь я хочу объединить 2 изображения в 1 (т.е. иметь гистограмму с таблицей внизу), но, похоже, я не могу этого добиться. Я пробовал использовать подзаголовки, но в документации по сюжету сказано, что нет собственного способа вставить таблицу Plotly в подзаголовок. В другой документации указано использование макетов в сочетании с осями и доменами, которые я не понимаю.

Может кто-нибудь поделится простым примером, как это сделать, пожалуйста? Спасибо


person John Smith    schedule 12.01.2018    source источник


Ответы (1)


Пройдя через руководство по подзаголовкам таблиц, я смог воспроизвести то, что вам нужно!

К сожалению, мы не можем использовать подзаголовки, как вы сказали, но этот другой метод не такой сложный, я постараюсь объяснить его в меру своих возможностей, чтобы вы могли реализовать его для других случаев использования.

Вам нужно знать свойство domain, где мы можем указать словарь, содержащий x and y start and end values, таким образом, мы можем расположить графики в разных местах, и эта концепция используется для создания подзаголовков.

Примечание. Нулевые значения домена x и y начинаются в нижнем левом углу холста.

Итак, для таблицы мы можем видеть домен, как показано ниже.

domain=dict(x=[0, 1], y=[0, 0.3])

Как вы можете видеть, мы говорим, что он должен начинаться с левого конца и растягиваться до правого конца графического холста, но если вы посмотрите на значения y, мы говорим, что он должен начинаться снизу и растягиваться только до 0,3 (30 %) графического полотна, поэтому есть место для размещения гистограммы!

Что касается гистограммы, домен указывается другим методом, проблема в том, что у нас нет удобного параметра domain, поэтому мы можем позиционировать его, используя его x and y axis.

trace1 = go.Bar(
    x=[1, 2, 3],
    y=[4, 5, 6],
    xaxis="X1",
    yaxis="Y1"
)

layout = dict(xaxis1=dict( dict(domain=[0, 1], anchor='y1')),
             yaxis1=dict( dict(domain=[0.38, 1], anchor='x1')))

Здесь мы видим, что в определении гистограммы нам просто нужно установить имена осей x и y диаграммы, а в макете мы можем определить домен, аналогично тому, что мы сделали в таблице.

Пожалуйста, дайте мне знать, если у вас возникнут какие-либо проблемы, и если ваша проблема полностью решена!

Ниже приведен рабочий фрагмент, к которому вы можете обратиться!

from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot
import plotly.graph_objs as go
from plotly import tools
import pandas as pd
import numpy as np
from datetime import datetime
init_notebook_mode(connected=True)

trace = go.Table(
    header=dict(values=['A Scores', 'B Scores']),
    cells=dict(values=[[100, 90, 80, 90],
                       [95, 85, 75, 95]]),
    domain=dict(x=[0, 1],
                y=[0, 0.3]))

trace1 = go.Bar(
    x=[1, 2, 3],
    y=[4, 5, 6],
    xaxis="X1",
    yaxis="Y1"
)

layout = dict(xaxis1=dict( dict(domain=[0, 1], anchor='y1')),
             yaxis1=dict( dict(domain=[0.38, 1], anchor='x1')))
fig = go.Figure(data = [trace,trace1], layout = layout)
iplot(fig, filename = 'basic_table')
person Naren Murali    schedule 13.01.2018
comment
Большое спасибо, Нарен, за объяснение, и пример кода работает отлично! Я понимаю, как сейчас работают домены, однако у меня все еще есть один вопрос - у объекта Bar есть свойства с именами 'yaxis' и 'xaxis', и все же в макете словарь указывает немного разные имена 'xaxis1' и 'yaxis1', как код знаете, как связать «xaxis1» с «xaxis»? В качестве эксперимента я удалил свойства xaxis и yaxis из объекта Bar, и столбчатая диаграмма и таблица по-прежнему были созданы правильно. - person John Smith; 15.01.2018
comment
@JohnSmith Я думаю, это связано с тем, что xaxis и yaxis отсутствуют для table объекта plotly, поэтому по умолчанию он применяется к bar диаграмме! - person Naren Murali; 15.01.2018
comment
Спасибо за это объяснение. - person getaglow; 11.04.2019