2017-02-26 78 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