我正在努力解决某些事情,即使我确定这是一个我忽略的小事,我找不到合理的解释。
在尝试绘制2x4子图时,8个图中的第一个绘制在整个8个网格上,而不是位于子图的位置(1,1)。剩下的7个图表按预期绘制,第一个图表在它们之下部分可见。这是我正在使用的代码:
#make a new trace (plot) for every sample:
def make_trace(x_list, y_list, samplename):
trace = go.Scatter(
x = x_list,
y = y_list,
name=samplename
)
layout = go.Layout(
title=samplename,
showlegend=True
)
)
return trace, layout
#call the make_trace function for every sample and append to the figure
def make_subplot():
fig = tls.make_subplots(rows=2, cols=4,plot_titles=cols_list)
row_num = [1,1,1,1,2,2,2,2,3,3,3,3]
column_num = [1,2,3,4,1,2,3,4,1,2,3,4]
i = 0
for sample in cols_list[1:]:
trace, layout = make_trace(normalised_df['percentage'],
normalised_df[sample], sample)
fig.append_trace(trace, row_num[i], column_num[i])
i += 1
fig['layout'].update(title='Normalized Mean Coverage', height=600,
width=800,showlegend=False,font=dict(size=14),
xaxis=dict(title="Transcript Length (%)"),
yaxis=dict(title="Normalised Mean Coverage"))
iplot(fig)
#call the function to create the entire figure:
make_subplot()
输出如下: coverage plot
**最后一句话:解决方案似乎在于设置xaxis / yaxis标题...当我在函数调用中的'layout'中更改它们而不是之后调用fig.update()时,子图按预期工作但它的方式太小了。问题是我想将make_trace()
保留为一个单独的函数,我稍后将其称为组合图,因此我无法在此函数中更改其x / yaxis标题。
答案 0 :(得分:0)
这似乎是情节库中的一个错误。在我的情况下已经解决了通过将情节包更新为3.6.0 for R.在Python中我不知道这是否也是一个错误。但如果是这样,只需在github上做一个错误报告。
祝你好运 思南
答案 1 :(得分:0)
您需要分别为每个子图设置xaxis和yaxis标题:
for idx, sample in enumerate(cols_list):
trace, layout = make_trace(normalised_df['percentage'],
normalised_df[sample], sample)
fig.append_trace(trace, row_num[i], column_num[i])
fig['layout']['xaxis{}'.format(idx+1)].update(title='Transcript Length (%)')
fig['layout']['yaxis{}'.format(idx+1)].update(title='Normalised Mean Coverage')
答案 2 :(得分:0)
您是否尝试过为每个子图设置轴和轴锚点?像这样:
t1 = go.Scatter(x=x, y=y1(x), xaxis="x1", yaxis="y1", name="Trace 1")
t2 = go.Scatter(x=x, y=y2(x), xaxis="x2", yaxis="y2", name="Trace 2")
layout = go.Layout(
xaxis1=dict(anchor="y1", domain=[0, 1]),
yaxis1=dict(anchor="x1", domain=[0.25, 0.45]),
xaxis2=dict(anchor="y2", domain=[0.5, 1]),
yaxis2=dict(anchor="x2", domain=[0.8, 1]))