我正在寻找一种方法来制作一个scatter绘图,python其中较小的绘图将被绘制在较大的绘图上方以提高图形的"可读性"(图像中是否有类似的单词?)
这是一个简单的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()
Run Code Online (Sandbox Code Playgroud)
产生:

我希望最后绘制较小的点,这样它们就不会隐藏在更大的点之后.我怎么能这样做?
sort在绘图之前申请
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)
Run Code Online (Sandbox Code Playgroud)
使用的数字alpha更具可读性.
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()
Run Code Online (Sandbox Code Playgroud)
输出是
