我有了若干个时间序列的原始数据all_data,和clusters, centroids。怎么用多个子图的形式,把所有的簇都用折线图画出来,并画出质心。
时间: 2024-03-10 21:44:00 浏览: 55
CLuStream算法的核心概念-数据流聚类知识&Stream;、CluStream、Birch算法
要将每个簇的时间序列数据绘制为多个子图,您可以使用matplotlib中的subplot()函数。该函数允许您在一个大图中创建多个子图,每个子图都可以单独绘制。
以下是一个Python示例代码,它可以将时间序列数据分配到簇中,并将每个簇的时间序列数据绘制为单独的子图,并将质心绘制为点:
```python
import matplotlib.pyplot as plt
import numpy as np
# 假设您已经有了时间序列数据,簇和质心
all_data = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15], [16, 17, 18, 19, 20], [21, 22, 23, 24, 25], [26, 27, 28, 29, 30]])
clusters = np.array([0, 1, 0, 1, 2, 2])
centroids = np.array([[2, 3, 4, 5, 6], [10, 11, 12, 13, 14], [23, 24, 25, 26, 27]])
# 将时间序列数据分配到它们所属的簇中
cluster_data = [[] for i in range(len(centroids))]
for i, d in enumerate(all_data):
c = clusters[i]
cluster_data[c].append(d)
# 创建每个子图并绘制每个簇的时间序列数据
for i, c in enumerate(cluster_data):
c = np.array(c)
plt.subplot(len(cluster_data), 1, i+1)
for j, ts in enumerate(c):
plt.plot(ts, label='Data {}'.format(j))
plt.plot(centroids[i], marker='x', markersize=10, color='black', label='Centroid')
plt.title('Cluster {}'.format(i))
plt.xlabel('Time')
plt.ylabel('Value')
plt.legend()
# 调整图形布局
plt.tight_layout()
# 显示图形
plt.show()
```
这个代码将产生一个图形,包含多个子图,每个子图都显示一个簇的时间序列数据的折线图,并将质心绘制为点。您可以根据自己的需求调整此代码以满足您的要求。
阅读全文