Мне нужно нанести линии на несколько осей Y. Тем не менее, в графике генерация оси в пределах go.Layout
довольно многословна, как в этом примере из сюжетной документации: https://plot.ly/python/multiple-axes/
layout = go.Layout(
title='multiple y-axes example',
width=800,
xaxis=dict(
domain=[0.3, 0.7]
),
yaxis=dict(
title='yaxis title',
titlefont=dict(
color='#1f77b4'
),
tickfont=dict(
color='#1f77b4'
)
## repeat for every new y-axis.
В matplotlib мне нравится сохранять код, генерируя все различные оси и обрабатывая графики в циклах следующим образом:
import matplotlib.pyplot as plt
import numpy as np
# generate dummy data
data = []
for i in range(5):
arr = np.random.random(10) * i
data.append(arr)
colors = ['black', 'red', 'blue', 'green', 'purple']
labels = ['label1', 'label2', 'label3', 'label4', 'label5']
# define other paramters (e.g. linestyle etc.) in lists
fig, ax_orig = plt.subplots(figsize=(10, 5))
for i, (arr, color, label) in enumerate(zip(data, colors, labels)):
if i == 0:
ax = ax_orig
else:
ax = ax_orig.twinx()
ax.spines['right'].set_position(('outward', 50 * (i - 1)))
ax.plot(arr, color=color, marker='o')
ax.set_ylabel(label, color=color)
ax.tick_params(axis='y', colors=color)
fig.tight_layout()
plt.show()
Из-за синтаксиса dict, используемого при генерации объектов, мне кажется, что я не могу заставить что-то подобное работать в заговоре. Я пытался заранее генерировать оси осей с помощью циклов и передавать их на go.Layout
, но безуспешно.
Если кто-нибудь может указать элегантный способ уменьшить избыточность, он будет очень признателен.
Всего наилучшего и заранее спасибо.