Python 基于列打印不同的颜色线
我目前使用的数据帧如下所示(它有24小时,这里我显示2小时): 图中只显示了前5行,但有4个不同的簇和3个不同的类。这些集群的分配与类无关,因此任何集群都可能包含属于所有3个类的行 我需要做的是制作尽可能多的线状图作为集群,在这里我可以显示集群的质心以及属于该集群的所有行。然而,我需要的是——而且似乎找不到办法——用不同的颜色绘制属于集群中每个类的线。这意味着每个图形最多有4种不同的颜色,1种用于质心,1种用于每个类 下面是我目前用来绘制簇质心和线的代码Python 基于列打印不同的颜色线,python,matplotlib,k-means,Python,Matplotlib,K Means,我目前使用的数据帧如下所示(它有24小时,这里我显示2小时): 图中只显示了前5行,但有4个不同的簇和3个不同的类。这些集群的分配与类无关,因此任何集群都可能包含属于所有3个类的行 我需要做的是制作尽可能多的线状图作为集群,在这里我可以显示集群的质心以及属于该集群的所有行。然而,我需要的是——而且似乎找不到办法——用不同的颜色绘制属于集群中每个类的线。这意味着每个图形最多有4种不同的颜色,1种用于质心,1种用于每个类 下面是我目前用来绘制簇质心和线的代码 import pandas as pd
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()
以下是使用当前代码获得的图形类型:
在图形编码过程中,我一直试图在第一个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行属于同一类,这就是为什么大多数是青色的,但你仍然可以看到一些橙色和洋红色的地方。红色的仍然是星团的质心。希望它能帮助任何做类似事情的人。