Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 双边缘线散点图_Python_Matplotlib_Scatter Plot - Fatal编程技术网

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