如下所示,我手动定义每个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)
答案 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)