散点图python双边缘线

scatterplot python double edge line

我有一个如下图所示的散点图,我希望我的散点图有双边缘,而不必在这个散点图的顶部创建具有相同坐标的相同散点图。我找不到如何将双线作为边缘。

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()


根据应用,使用特殊符号作为标记也可能是一种选择。参见 or the complete list

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()