При работе с перекрывающимися диаграммами разброса с высокой плотностью или линейными графиками разных цветов может быть удобно реализовать схемы аддитивного смешивания, в которых цвета RGB каждого маркера складываются вместе, чтобы получить окончательный цвет на холсте. Это обычная операция в движках 2D и 3D рендеринга.
Однако в Matplotlib я нашел поддержку только смешивания альфа / непрозрачности. Есть ли какой-нибудь обходной способ сделать это, или я застрял на рендеринге в растровое изображение, а затем смешиваю их в какой-нибудь программе рисования?
Изменить: вот пример кода и ручное решение.
Это приведет к двум частично перекрывающимся случайным распределениям:
x1 = randn(1000)
y1 = randn(1000)
x2 = randn(1000) * 5
y2 = randn(1000)
scatter(x1,y1,c='b',edgecolors='none')
scatter(x2,y2,c='r',edgecolors='none')
Это создаст в matplotlib следующее:
Как видите, есть несколько перекрывающихся синих точек, которые перекрываются красными точками, и мы хотели бы их увидеть. Используя смешивание альфа / непрозрачности в matplotlib, вы можете:
scatter(x1,y1,c='b',edgecolors='none',alpha=0.5)
scatter(x2,y2,c='r',edgecolors='none',alpha=0.5)
Что даст следующее:
Но на самом деле мне нужно следующее:
Я могу сделать это вручную, визуализируя каждый график независимо в растровое изображение:
xlim = plt.xlim()
ylim = plt.ylim()
scatter(x1,y1,c='b',edgecolors='none')
plt.xlim(xlim)
plt.ylim(ylim)
scatter(x2,y2,c='r',edgecolors='none')
plt.xlim(xlim)
plt.ylim(ylim)
plt.savefig(r'scatter_blue.png',transparent=True)
plt.savefig(r'scatter_red.png',transparent=True)
Это дает мне следующие изображения:
Что вы можете сделать, так это загрузить их как независимые слои в Paint.NET/PhotoShop/gimp и просто смешать их аддитивно.
Идеально было бы сделать это программно в Matplotlib, так как я буду обрабатывать сотни таких!