python-3.x - 聚类一维数据并在 matplotlib 直方图上表示聚类
问题描述
我有以下格式的一维数据:
areas = ...
plt.figure(figsize=(10, 10))
plt.hist(areas, bins=80)
plt.show()
这个情节看起来是这样的:
现在我希望能够对这些数据进行聚类。我知道我可以选择核密度估计或 K-Means。但是一旦我有了这些值,我如何在直方图上表示这些集群?
解决方案
您只需要弄清楚您的集群分配,然后分别绘制数据的每个子集,同时注意每次的 bin 都相同。
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
import matplotlib as mpl
mpl.rcParams['axes.spines.top'] = False
mpl.rcParams['axes.spines.right'] = False
# simulate some fake data
n = 10000
mu1, sigma1 = 0, 1
mu2, sigma2 = 6, 2
a = mu1 + sigma1 * np.random.randn(n)
b = mu2 + sigma2 * np.random.randn(n)
data = np.concatenate([a, b])
# determine which K-Means cluster each point belongs to
cluster_id = KMeans(2).fit_predict(data.reshape(-1, 1))
# determine densities by cluster assignment and plot
fig, ax = plt.subplots()
bins = np.linspace(data.min(), data.max(), 40)
for ii in np.unique(cluster_id):
subset = data[cluster_id==ii]
ax.hist(subset, bins=bins, alpha=0.5, label=f"Cluster {ii}")
ax.legend()
plt.show()
推荐阅读
- ms-access - 在数组中查找某些信息
- c# - 用于短语搜索的正则表达式
- python - 使用 Python 和 BeautifulSoup 从嵌入式推文中提取文本
- django - 当用户关闭基于 django2.0 的网站上的选项卡或浏览器时如何强制注销用户
- excel - 通过vb.net从不相邻列的excel中散点图
- spring - Java Spring with H2 数据库,spring 启动慢
- c++ - 使用 CImage 和 CStatic 显示变化的图像时的生命周期和资源管理
- c# - 为什么我的 LiveCharts 图表没有显示任何值?
- vim - grep 如何生成单独的缓冲区或拆分窗口
- tcl - 如何在 TCL 中卸载包?