根据列绘制不同的颜色线

时间:2020-01-14 17:32:35

标签: python matplotlib k-means

我目前正在使用一个看起来像这样的数据框(它有24小时,这里我显示2小时):

Dataframe

该图像仅显示前5行,但是有4个不同的簇和3个不同的类。群集的分配与类别无关,因此任何群集都可以包含属于所有3个类别的行。

我需要做的是制作与簇一样多的折线图,在那里我可以显示簇的质心以及属于该簇的所有行。但是,我需要的-似乎找不到解决方法-是以不同的颜色绘制群集中属于每个类的线的图。这意味着每个图最多具有4种不同的颜色,质心1种,每个类别1种。

这是我当前用来绘制聚类质心和线条的代码。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors
import seaborn as sb
from sklearn.cluster import KMeans
from sklearn.metrics import pairwise_distances_argmin_min
from tslearn.clustering import TimeSeriesKMeans
from tslearn.datasets import CachedDatasets
from tslearn.preprocessing import TimeSeriesScalerMeanVariance

%matplotlib inline
from mpl_toolkits.mplot3d import Axes3D
plt.rcParams['figure.figsize'] = (16, 9)
plt.style.use('ggplot')
K = 4

X = np.array(dffinal[['h0','h1','h2','h3','h4','h5','h6','h7','h8','h9','h10','h11','h12','h13','h14','h15','h16','h17','h18','h19','h20','h21','h22','h23']])
y = np.array(dffinal.index)
euc_km = TimeSeriesKMeans(n_clusters=K,
                           metric='euclidean')
cluster = euc_km.fit_predict(X)
dffinal['cluster'] = cluster

for name, data in dffinal.groupby('cluster'):
    for xx in X[cluster == name]:
        plt.plot(euc_km.cluster_centers_[name].ravel(), "r-")
        plt.plot(xx.ravel(), "k-", alpha=.2)
    #plt.xlabel('Hour')
    #plt.ylabel('Demand')
    #plt.legend()
    plt.savefig('plot_euc_{}.png'.format(name))
    plt.close()

这些是使用当前代码获得的图形:

Centroid in Red, All lines in Black

我一直试图在图形编码过程中在第一个groupby之后添加第二个条件,但似乎无法实现。

预先感谢

编辑:我相信我可以通过使用以下代码来工作,以防其他人也遇到同样的问题。

    s = ['deepskyblue','darkorange','magenta']
for name, data in dffinal.groupby('cluster'):
    counter = -1
    for categoria, data in dffinal.groupby('clase'):
        counter = counter + 1
        for curve in Xc[(clase == categoria) & (cluster == name)]:
            plt.plot(curve.ravel(), s[counter], alpha=0.1)
    plt.plot(euc_km.cluster_centers_[name].ravel(), "r-")
    plt.savefig('plot_euc_{}.png'.format(name))
    plt.close()

这是我最终图形的外观。我有1450多行数据,其中1250左右属于同一类,这就是为什么大多数都是青色的原因,但是您仍然可以在其中看到橙色和洋红色。红色的仍然是簇质心。希望它能帮助任何人做类似的事情。 enter image description here

0 个答案:

没有答案