2017-10-12 41 views
0

我正在使用matplotlib繪製一個圖。 x和y軸是離散值,因此列表中的幾個(x,y)點具有相同的值。例如,假設我們有以下的X,Y點:如何使用matplotlib使散點更大,密度更高?

x=[0,1,1,2,2,2,2,2] 
y=[0,1,2,3,3,3,3,5] 

現在所有的(X,Y)點的發生一次,但(2,3)發生的4倍。當我使用plt.scatter(x,y)時,它只顯示(2,3)爲常規點,一次。怎樣才能顯示出現的密度呢?例如,一個更大的標記?

回答

3

可以傳遞一個可選的參數splt.scatter指示正在繪製的各點的大小:如果阿爾法小於1的更頻繁的點會顯得更暗/不太透明。爲了獲得與每個點的出現相對應的大小,首先構建一個字典,計算出現的次數,然後創建每個點的大小列表。

import matplotlib.pyplot as plt 
from collections import Counter 

x=[0,1,1,2,2,2,2,2] 
y=[0,1,2,3,3,3,3,5] 

# count the occurrences of each point 
c = Counter(zip(x,y)) 
# create a list of the sizes, here multiplied by 10 for scale 
s = [10*c[(xx,yy)] for xx,yy in zip(x,y)] 

# plot it 
plt.scatter(x, y, s=s) 
plt.show() 

enter image description here

+0

偉大,感謝.. –

+0

@AminGhaderi如果這是你需要什麼,請把它標記爲接受。 – Wen

+0

謝謝。我只是標記了它。 –

3

將透明度設置爲小於1可能是一種可視化的方法;

plt.scatter(x, y, s=80, alpha=0.2) 

enter image description here