2015-09-21 74 views
2

我正在處理一些具有多個相同數據點的數據。我想在散點圖中顯示數據,但散點圖並不能很好地顯示重複數據。如何計算散點圖中相同的數據點?

如果我改變alpha值,那麼相同的數據點會變得更暗,這很好,但並不理想。

有什麼方法可以將點的顏色映射到數據集中出現的次數?大小怎麼樣?如何將點的大小分配給數據集中發生的次數?

+1

你不喜歡使用alpha?您建議的其他方法的缺點是它們依賴於計算完全相同的值。但是你可能有很多*幾乎相等的值在散點圖上重疊。任何涉及計算單個值的方法都不會改善繪圖,但使用alpha將會,因爲部分重疊點仍然會導致變暗。 – BrenBarn

回答

2

正如它指出的那樣,這是否有意義取決於您的數據集。如果你有合理的離散點和精確匹配任何意義,你可以做這樣的事情:

import numpy as np 
import matplotlib.pyplot as plt 
test_x=[2,3,4,1,2,4,2] 
test_y=[1,2,1,3,1,1,1] # I am just generating some test x and y values. Use your data here 
#Generate a list of unique points 
points=list(set(zip(test_x,test_y))) 
#Generate a list of point counts 
count=[len([x for x,y in zip(test_x,test_y) if x==p[0] and y==p[1]]) for p in points] 
#Now for the plotting: 
plot_x=[i[0] for i in points] 
plot_y=[i[1] for i in points] 
count=np.array(count) 
plt.scatter(plot_x,plot_y,c=count,s=100*count**0.5,cmap='Spectral_r') 
plt.colorbar() 
plt.show() 

注意:您將需要調整根據您的點密度的半徑(以日s參數的值100)。我還使用計數的平方根來縮放它,以便點面積與計數成正比。

另請注意:如果您有非常密集的點,則可能更適合使用不同類型的圖。例如直方圖(我個人喜歡hexbin二維數據)在這些情況下是一個體面的替代品。