【发布时间】:2020-12-22 16:03:23
【问题描述】:
【问题讨论】:
标签: python matplotlib scatter-plot
【问题讨论】:
标签: python matplotlib scatter-plot
虽然我喜欢@Stef 创建新标记符号的答案,但您也可以根据现有符号与其他点的距离调整现有符号的大小:
import matplotlib.pyplot as plt
import numpy as np
from sklearn.neighbors import NearestNeighbors
# create random data
x = np.random.rand(10)
y = np.ones(len(x))
# open figure + axes
fig,axs = plt.subplots(1,2)
# standard scatter-plot
MarkerSize = 40
axs[0].scatter(x,y,s=MarkerSize)
# re-arrange data
xy = []
for x1,y1 in zip(x,y):
xy.append([x1,y1])
# find nearest neighbors to itself (skip the first column because it finds the exact same element, i.e. with zero distance)
dst,idx = NearestNeighbors(n_neighbors=2).fit(xy).kneighbors(xy)
dst = dst[:,1]
# create a vector for the marker-size
S = dst/dst.max()*MarkerSize
# scatter plot with adjusted marker-size
axs[1].scatter(x,y,s=S)
我使用 scikit-learn 的 sklearn.neighbors.NearestNeighbors() 来计算点之间的最小距离,并将其作为比例因子传递给 matplotlib.pyplot.scatter() 的大小参数 s=。 There 是 scatter() 中标记大小参数的小教程。
【讨论】:
您可以根据路径定义自己的标记,请参阅Marker Path Example。
import matplotlib.pyplot as plt
import matplotlib.path as mpath
pointed_diamond = mpath.Path([[0,-.5],[-.1,0],[0,.5],[.1,0],[0,-.5]], [1,2,2,2,79])
plt.plot([1,2,3], marker=pointed_diamond, markersize=10)
【讨论】: