2017-02-26 144 views
2

我有一个散点图,如下图,并希望我的绘图具有双重边缘,而不必使用相同的坐标在同一个坐标上创建相同的散点图。我无法找到如何将双线作为边缘。scatterplot蟒蛇双刃线

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

的主要原因是这个问题来源于我有一个错误:当我与叠加在同一坐标散点图,新的情节我创建倾向于略微修改自己的立场,不完全符合一个在每个其他bad fit

此错误不显示时背景标记有facecolors=''但只有当它有facecolors='w'这对我来说是一个问题。

+0

你能告诉确切的代码,使该问题?并让你更新到matplotlib 2.0? – f5r5e5d

+0

@ f5r5ed是的,已更新。使用下面的代码,如果我删除了N = 50并执行以下操作,则错误返回: 'cmap = plt.get_cmap('jet_r') colors = cmap(np.linspace(0.1,0.9,cmap.N// 2)) whites = [[1,1,1]]' – MattnDo

回答

1

这似乎确实是一个错误。

可能的解决方案是使用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() 

enter image description here


根据使用特殊符号作为标记也可能是一种选择的应用程序。请参阅 this questioncomplete 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() 

enter image description here

+0

我不知道为什么,但这似乎工作!非常感谢。只是最后一个,有没有什么办法可以对新创建的标记进行“分组”以避免错误重叠? – MattnDo

+0

不,matplotlib无法对标记进行分组。您需要计算自己哪些标记重叠,因为这会以点为单位将数据单位标记化。 (例如,如果您放大,点会重叠?)。这当然可以是自动的,但需要一些代码行。使用直方图('np.histogram2d')可能会有所帮助。或者你可以直接在matplotlib中绘制直方图('plt.hist2d'或'plt.hexbin'),但它会给出某种不同的情节。 – ImportanceOfBeingErnest

+0

我在我的数据框中有日期和时间,所以我可能会将它与'zorder'结合起来使它工作。好时光! – MattnDo