Как я могу вырезать большое пространство в нижней части участка в сюжет? - PullRequest
0 голосов
/ 24 августа 2018

Я использую plotly для создания интерактивных графиков. В моем случае у меня будет одна таблица и сюжет на одной фигуре. enter image description here

import matplotlib
matplotlib.use('Agg')
import plotly.offline as offline
from plotly import tools
import plotly.graph_objs as go

trace1=go.Scatter(x=[1, 2, 3], y=[1, 3, 5], name='abc', mode = 'lines+markers', xaxis='x1', yaxis='y1', showlegend=True)
trace2=go.Scatter(x=[1, 2, 3], y=[1, 2, 3], name='cba', mode = 'lines+markers', xaxis='x1', yaxis='y1', showlegend=True)
trace3=go.Table(
        domain=dict(x=[0, 1], y=[0, 0.5]),
        header=dict(values=['', 'fields1', 'fields2', 'fields3']),
        cells=dict(values=[[['row1'], ['row2'], ['row3']], [['11'], ['12'], ['13']], [['21'], ['22'], ['23']], [['31'], ['32'], ['33']]], font = dict(color = '#506784', size = 11))
        )
axis=dict(
    showline=True,
    zeroline=False,
    showgrid=True,
    mirror=True,
    ticklen=4,
    gridcolor='#ffffff',
    tickfont=dict(size=10)
)

param1 = dict(
    xaxis1=dict(axis, **dict(domain=[0, 1], anchor='y1', showticklabels=False)),
    yaxis1=dict(axis, **dict(domain=[0.55, 1], anchor='x1', tickprefix='$', hoverformat='.2f')),
        )
layout1 = dict(
    title='Bitcoin mining stats for 180 days',
    margin = dict(t=100),
    showlegend=False,
    plot_bgcolor='rgba(228, 222, 249, 0.65)'
)
layout1.update(param1)
fig1=dict(data=[trace1, trace2, trace3], layout=layout1)
offline.plot(fig1, auto_open=False, output_type='file', filename='abc.html')

Как убрать место под столом? Можно ли автоматически изменять размер фигурки в соответствии с фактическим размером элементов?

1 Ответ

0 голосов
/ 25 августа 2018

Глядя на ваш domain параметр, особенно там, где вы устанавливаете yaxis:

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

и

yaxis1=dict(axis, **dict(domain=[0.55, 1],

По коду вы говорите, что таблица будет составлять от 0% до 50% по оси Yaxis. И график - от 55% до 100%. Но смотри! Ваша таблица слишком мала, чтобы заполнить этот пробел (50%).

Итак, у вас есть варианты решения проблемы:

  1. Увеличение количества данных в вашей таблице. Тогда размер таблицы увеличится, а разрыв уменьшится и впоследствии исчезнет;

  2. Или поверните таблицу снизу и увеличьте размер графика (например, 0-15% до таблицы и 15-100% для графика по оси Yaxis), и результат должен быть примерно таким (полный код ниже): 100% your graph

Код:

import matplotlib
matplotlib.use('Agg')
import plotly.offline as offline
from plotly import tools
import plotly.graph_objs as go

trace1=go.Scatter(x=[1, 2, 3], y=[1, 3, 5], name='abc', mode = 'lines+markers', xaxis='x1', yaxis='y1', showlegend=True)
trace2=go.Scatter(x=[1, 2, 3], y=[1, 2, 3], name='cba', mode = 'lines+markers', xaxis='x1', yaxis='y1', showlegend=True)
trace3=go.Table(
        #Set space for table from 0% to 15%
        domain=dict(x=[0, 1], y=[0, 0.15]),
        header=dict(values=['', 'fields1', 'fields2', 'fields3']),
        cells=dict(values=[[['row1'], ['row2'], ['row3']], [['11'], ['12'], ['13']], [['21'], ['22'], ['23']], [['31'], ['32'], ['33']]], font = dict(color = '#506784', size = 11))
        )
axis=dict(
    showline=True,
    zeroline=False,
    showgrid=True,
    mirror=True,
    ticklen=4,
    gridcolor='#ffffff',
    tickfont=dict(size=10)
)

param1 = dict(
    xaxis1=dict(axis, **dict(domain=[0, 1], anchor='y1', showticklabels=False)),
    #Set space to graph from 15% to 100%
    yaxis1=dict(axis, **dict(domain=[0.15, 1], anchor='x1', tickprefix='$', hoverformat='.2f')),
        )
layout1 = dict(
    title='Bitcoin mining stats for 180 days',
    margin = dict(t=100),
    showlegend=False,
    plot_bgcolor='rgba(228, 222, 249, 0.65)',
    autosize=True,
)
layout1.update(param1)
fig1=dict(data=[trace1, trace2, trace3], layout=layout1)
offline.plot(fig1, auto_open=False, output_type='file', filename='abc.html')

Также вы можете установить параметры xaxis для получения более красивого графика (установите пространство для графика от 25% до 75%): enter image description here

...