Python 双边缘线散点图
我有一个散点图,如下所示,我希望我的图有一个双刃,而不必在这一点上创建具有相同坐标的相同散点。我找不到如何用双线作为边Python 双边缘线散点图,python,matplotlib,scatter-plot,Python,Matplotlib,Scatter Plot,我有一个散点图,如下所示,我希望我的图有一个双刃,而不必在这一点上创建具有相同坐标的相同散点。我找不到如何用双线作为边 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,ed
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()
根据应用,也可以选择使用特殊符号作为标记。看或看
您能给出问题的确切代码吗?您是否已更新到matplotlib 2.0?@f5r5ed是的,已更新。如果我删除N=50并执行以下操作,那么下面的代码中的错误又回来了:
cmap=plt.get\u cmap('jet\u r')colors=cmap(np.linspace(0.1,0.9,cmap.N//2))whites=[[1,1,1]
我不知道为什么,但这似乎有效!谢谢。最后一点,有没有办法对新创建的标记进行“分组”以避免错误的重叠?没有,matplotlib无法对标记进行分组。您需要自己计算哪些标记重叠,因为这将以点为单位的标记与数据单位混合。(例如,如果放大,点是否仍会重叠?)。这当然可以自动化,但需要一些代码行。为此(np.historogram2d
)使用组织编程可能会有所帮助。或者您可以直接在matplotlib中绘制直方图(plt.hist2d
或plt.hexbin
),但它会给出某种不同的绘图。我的数据框中有日期和时间,因此我可以将其与zorder
结合使用。美好的未来!!
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()