Как заставить Plot.ly Python использовать заданный диапазон яксиса? - PullRequest
0 голосов
/ 23 мая 2018

Как вы можете видеть ниже, я вручную определяю диапазон для каждой оси Yaxis, а также устанавливаю для параметра автодиапазона значение False.

Однако, если вы отобразите это на графике, вы все равно обнаружите, что диапазон yaxis1 равен 0.до 20, а не от 0 до 25. В результате один из столбцов выпадает из графика.

Как мне сделать так, чтобы я был уверен, что каждое значение будет содержаться в ясидиапазон?

Редактировать: Кроме того, верхняя линия сетки во втором ряду не отображается.Если я немного перемасштабирую, он появится снова.Так что проблема кажется чисто графической.Любые идеи приветствуются.

from plotly import tools
fig = tools.make_subplots(rows=2, cols=2, subplot_titles=['A', 'B'], shared_xaxes=False, shared_yaxes=True)

data = [[10, 4, 15, 20.5], [3, 12, 22.2], [6.5, 12, 26.2], [18, 4.2, 22.2]]
traces = [go.Bar(x=['Type A', 'Type B', 'Type C'], y=d) for d in data]

fig.append_trace(traces[0], 1, 1)
fig.append_trace(traces[1], 1, 2)
fig.append_trace(traces[2], 2, 1)
fig.append_trace(traces[3], 2, 2)

fig['layout']['yaxis1'].update(title='', range=[0, 25], autorange=False)
fig['layout']['yaxis2'].update(title='', range=[0, 30], autorange=False)

py.iplot(fig)

Produced Chart with incorrect axis

1 Ответ

0 голосов
/ 30 мая 2018

Итак, я попробовал ваш код и смог воспроизвести проблему.

Причина:

Причина этого в том, что если вы посмотрите на верхнююПо оси Y на левом графике видно, что есть 3 значения [0, 10, 20], поэтому разница между значениями составляет 10.поэтому, когда вы устанавливаете диапазон как [0, 25], разница в 10 не встречается, следовательно, мы не можем видеть 25 в яси.

Если мы посмотрим на график внизу слеваxaxis, мы можем видеть, что значение 30 подчиняется разнице 10 между каждым из значений.Таким образом, мы можем видеть 30 в яксисе!

Решение:

Если вы посмотрите на документацию, найденную здесь ,мы можем использовать конкретное свойство объекта yaxis для установки приращения между каждым из тиков, называемое dtick, графически определяющее его как:

PS: личное спасибо Максимилиану Петерсу для помощи в поиске решения !!!!

dtick (число или категориальная строка координат)
Устанавливает промежуточные отметки по этой оси.Используйте с tick0.Должно быть положительным числом или специальными строками, доступными для осей «log» и «date».Если ось type имеет значение «log», то тики устанавливаются каждые 10 ^ (n «dtick), где n - номер тика. Например, для установки отметки в 1, 10, 100, 1000, ...установите dtick на 1. Чтобы установить метки на 1, 100, 10000, ... установите dtick на 2. Чтобы установить метки на 1, 5, 25, 125, 625, 3125, ... установите dtick на log_10 (5) или 0,69897000433. «log» имеет несколько специальных значений; «L», где f - положительное число, задает тики, линейно распределенные по значению (но не по положению). Например, tick0 = 0,1, dtick =«L0.5» будет ставить галочки на 0,1, 0,6, 1,1, 1,6 и т. Д. Чтобы показать степени 10 плюс маленькие цифры между ними, используйте «D1» (все цифры) или «D2» (только 2 и 5). tick0игнорируется для "D1" и "D2". Если ось type является "датой", необходимо преобразовать время в миллисекунды. Например, чтобы установить интервал между тиками в один день, установите dtick в 86400000.0. «date» также имеет специальные значения «M» дает тики, разделенные числом месяцев. n должно быть положительным целым числом. Чтобы установить тики 15-го числа каждого третьего месяца, установите tick0 в «»2000-01-15 "и dtick до" M3 ".Чтобы устанавливать тики каждые 4 года, установите dtick на «M48»

Итак, когда мы установим dtick как 5 и диапазон как [0,25], мы получим ожидаемый результат!

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

import pandas as pd
import plotly.offline as py_offline
import plotly.graph_objs as go
py_offline.init_notebook_mode()
from plotly import tools
fig = tools.make_subplots(rows=2, cols=2, subplot_titles=['A', 'B'], shared_xaxes=False, shared_yaxes=True)

data = [[10, 4, 15, 20.5], [3, 12, 22.2], [6.5, 12, 26.2], [18, 4.2, 22.2]]
traces = [go.Bar(x=['Type A', 'Type B', 'Type C'], y=d) for d in data]

fig.append_trace(traces[0], 1, 1)
fig.append_trace(traces[1], 1, 2)
fig.append_trace(traces[2], 2, 1)
fig.append_trace(traces[3], 2, 2)

fig['layout']['yaxis1'].update(title='', range=[0, 25], dtick=5, autorange=False)
fig['layout']['yaxis2'].update(title='', range=[0, 30], autorange=False)

py_offline.iplot(fig)
...