Я строю повторные графики Seaborn как вспомогательные участки и хочу, чтобы цветовая палитра каждой строки была одинаковой.
Я делаю анализ Design of Experiment на Python, и у меня возникают проблемы с построением графикаэффекты взаимодействия с Seaborn.
Я хочу, чтобы цветовые пары в каждом ряду были одинаковыми, но я не могу найти способ сделать это с помощью методов matplotlib или seaborn.Я попробовал предложения 'with sns.color_palette ()' и 'ax.set_prop_cycle ()' из других вопросов, но на рисунке показано то же, что и без них.
При этом создается кадр данных
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
import itertools as it
encoded_inputs = list( it.product([-1, 1], [-1, 1], [-1, 1]) )
doe = pd.DataFrame(encoded_inputs, columns=['x1', 'x2', 'x3'])
doe['y1'] = doe.apply( lambda z : sum([ np.random.rand()*z["x%d"%(i)]+0.01*(0.5-np.random.rand()) for i in range(1,3) ]), axis=1)
print(doe)
При этом создается рисунок с подзадачами:
factors = ['x1', 'x2', 'x3']
f, axs = plt.subplots(3, 3, figsize=(12, 12))
for i in range(len(factors)):
for j in range(len(factors)):
yy = factors[j]
with sns.color_palette('Paired'):
sns.regplot(x=factors[i], y='y1', data=doe[doe[yy]==-1], label='-1', x_estimator=np.mean, ci=None, truncate=True, ax=axs[j,i])
sns.regplot(x=factors[i], y='y1', data=doe[doe[yy]==1], label='1', x_estimator=np.mean, ci=None, truncate=True, ax=axs[j,i])
axs[j,i].legend(title=yy,facecolor='white')
if i==j:
axs[j,i].clear()
for ax in axs.flat:
ax.set_ylabel(None)
plt.tight_layout()
plt.show()
Фактический результат состоит в том, что цветовая палитра циклически перебирает все подзадачи в порядке рисования.Я хотел бы иметь возможность сбросить итератор цветовой палитры, когда я начну рисовать вспомогательные участки нового столбца, или синхронизировать цвета двух вспомогательных участков.