如何强制 Plot.ly Python 使用给定的 yaxis 范围?

Amo*_*urK 6 python-3.x plotly plotly-dash

如下所示,我手动定义了每个 yaxis 的范围,并将 autorange 选项设置为 False。

但是,如果您绘制此图,您仍会发现 yaxis1 的范围是 0 到 20,而不是 0 到 25。因此,其中一个条形伸出图表。

我如何才能确定每个值都包含在 yaxis 范围内?

编辑:此外,第二行的顶部网格线未显示。如果我稍微重新缩放,它会再次出现。所以这个问题似乎纯粹是图形化的。任何想法表示赞赏。

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)
Run Code Online (Sandbox Code Playgroud)

生成的图表轴不正确

Nar*_*ali 6

所以我尝试了你的代码并且能够复制这个问题。

原因:

造成这种情况的原因是,如果您查看左上图的 yaxis,您会看到有 3 个值[0, 10, 20],因此10每个值之间存在 , 的差异。因此,当您将范围设置为 时[0, 25]10不满足的差异,因此我们无法25在 yaxis 中看到。

如果我们查看左下角 x 轴上的图表,我们可以看到该值30服从10每个值之间的, 差异。因此我们能够30在yaxis中看到!

解决方案:

如果您查看这里的 plotly 文档,我们可以使用yaxis对象的特定属性来设置每个刻度之间的增量,称为dtick,将其定义为:

PS:个人感谢马克西米利安·彼得斯帮助找到解决方案!!!!

dtick(数字或分类坐标字符串)
设置此轴上刻度之间的步长。与 一起使用tick0。必须是正数或可用于“日志”和“日期”轴的特殊字符串。如果轴type是“log”,则每 10^(n"dtick) 设置刻度,其中 n 是刻度编号。例如,要在 1, 10, 100, 1000, ... 设置刻度标记为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”

所以,当我们设置dtickas5和 range as[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)
Run Code Online (Sandbox Code Playgroud)