2014-05-01 191 views
4

小我正在尋找一種方式來產生python一個scatter圖,其中較小的地塊將被繪製上述較大的提高了人物的「可讀性」(是不是也有類似的字?用於圖像)繪圖區底部大點和頂部

這裏有一個簡單的MWE:

import numpy as np 
import matplotlib.pyplot as plt 


def random_data(N): 
    # Generate some random data. 
    return np.random.uniform(70., 250., N) 

# Data lists. 
N = 1000 
x = random_data(N) 
y = random_data(N) 
z1 = random_data(N) 
z2 = random_data(N) 

cm = plt.cm.get_cmap('RdYlBu') 
plt.scatter(x, y, s=z1, c=z2, cmap=cm) 
plt.colorbar() 

plt.show() 

主要生產:

enter image description here

我希望最後繪製的小點不會超過大點。我怎麼能這樣做?

回答

6

alpha使用更可讀繪製

order = np.argsort(-z1) # for desc 
x = np.take(x, order) 
y = np.take(y, order) 
z1 = np.take(z1, order) 
z2 = np.take(z2, order) 

該圖之前應用sort

import numpy as np 
import matplotlib.pyplot as plt 


def random_data(N): 
    # Generate some random data. 
    return np.random.uniform(70., 250., N) 

# Data lists. 
N = 1000 
x = random_data(N) 
y = random_data(N) 
z1 = random_data(N) 
z2 = random_data(N) 

order = np.argsort(-z1) 
x = np.take(x, order) 
y = np.take(y, order) 
z1 = np.take(z1, order) 
z2 = np.take(z2, order) 

cm = plt.cm.get_cmap('RdYlBu') 
plt.scatter(x, y, s=z1, c=z2, cmap=cm, alpha=0.7) # alpha can be 0 ~ 1 
plt.colorbar() 

plt.show() 

輸出是

enter image description here