Диафрагма

У меня есть график рассеяния, как ниже, и мне хотелось бы, чтобы мои сюжеты имели двойной край, без необходимости создавать одинаковый разброс с теми же координатами поверх этого. Я не мог найти, как иметь двойную линию в качестве края.

import numpy as np import matplotlib.pyplot as plt N = 50 x = np.random.rand(N) y = np.random.rand(N) colors = np.random.rand(N) plt.scatter(x, y, s=400, c=colors,marker='h' alpha=0.5,edgecolors='black',linewidth=1) plt.show() 

Основная причина этого вопроса связана с ошибкой, которую я имею: когда я накладываю диаграммы рассеяния с одинаковыми координатами, новые графики, которые я создаю, имеют тенденцию слегка изменять свои позиции и не идеально подходят друг другу друг над другом плохой подход

Эта ошибка не отображается, когда фоновый маркер имеет facecolors='' но только когда у него есть facecolors='w' что является проблемой для меня.

Кажется, это действительно ошибка.

Возможным решением может быть использование аргумента colors для построения белых точек рассеяния.

 import numpy as np import matplotlib.pyplot as plt N = 50 x = np.random.rand(N) y = np.random.rand(N) colors = np.random.rand(N) whites = [[1,1,1]]*N plt.scatter(x, y, s=400, c=whites, marker='h', alpha=0.5,edgecolors='black',linewidth=1) plt.scatter(x, y, s=260, c=colors, marker='h', alpha=0.5,edgecolors='black',linewidth=1) plt.show() 

введите описание изображения здесь


В зависимости от приложения с использованием специальных символов в качестве маркеров также может быть опция. См. Этот вопрос или полный список .

 import matplotlib.pyplot as plt N = 4 x = [1,1,2,2] y = [1,2,1,2] symbols = [ur"$\u27C1$", ur"$\u25C8$", ur"$\u229A$", ur"$\u29C8$"] for i in range(N): plt.scatter(x[i], y[i], s=400, c=(i/float(N), 0, 1-i/float(N)), marker=symbols[i], alpha=0.5,linewidth=1) plt.show() 

введите описание изображения здесь