6

正如您在下面看到的,我手动定义了每个 y 轴的范围,并将自动范围选项设置为 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)

生成的图表轴不正确

4

1 回答 1

6

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

原因:

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

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

解决方案:

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

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

dtick(数字或分类坐标字符串)
设置此轴上刻度之间的步长。与 一起使用tick0。必须是正数,或可用于“日志”和“日期”轴的特殊字符串。如果轴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”

因此,当我们设置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)
于 2018-05-30T17:38:57.940 回答