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

时间:2018-05-23 14:50:10

标签: python-3.x plotly plotly-dash

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

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

如何制作它以便我可以确定每个值都包含在y轴范围内?

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

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 :(得分:2)

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

<强>原因:

原因在于,如果您查看左上图的y轴,您会看到有3个值[0, 10, 20],因此每个值之间存在10的差异。因此,当您将范围设置为[0, 25]时,不会达到10的差异,因此我们无法在y轴中看到25

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

<强>解决方案:

如果你看一下情节文档,发现here,我们可以使用yaxis对象的特定属性来设置每个标记之间的增量,称为dtick,将其定义为:

P.S:个人感谢Maximilian Peters帮助找到解决方案!!!!

  

dtick(数字或分类坐标字符串)
设置步骤   此轴上的中间刻度线。与tick0一起使用。必须是积极的   “日志”和“日期”轴可用的数字或特殊字符串。如果   轴type是“log”,然后每隔10 ^(n“dtick)设置刻度,其中n为   刻度数。例如,要将刻度线设置为1,10,100,1000,   ...将dtick设置为1.要将刻度线设置为1,100,10000,...设置dtick   要在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。 “日期”   也有特殊值“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)