for i in range(5): plt.plot(data[i][0], data[i][1], color=colors[i], label=labels[i])
时间: 2023-11-11 16:05:15 浏览: 29
这段代码是使用 Matplotlib 库中的 plot 函数绘制五条曲线,每条曲线的 x 轴数据为 data[i][0],y 轴数据为 data[i][1]。colors 是一个包含五种颜色的列表,labels 是一个包含五个标签的列表,用于给每条曲线添加颜色和标签。在循环中,使用 i 的值从 0 到 4,分别绘制五条曲线,每条曲线使用不同的颜色和标签。最后,使用 legend 函数添加图例。
相关问题
import math import matplotlib.pyplot as plt import pandas as pd file_path = r'C:\Users\520605\Desktop\data.xlsx' raw_data = pd.read_excel(file_path, header=0) data = raw_data.values viscosity = data[0:,:2] print(viscosity) density = data[0:,:3] print(density) num_1 =data[-1,0:0] C=torch.zeros(10) def dis(a,b): return math.sqrt((a[0]-b[0])*(a[0]-b[0])+(a[1]-b[1])*(a[1]-b[1])) K = 4 CentPoint = [] for i in range(K): CentPoint.append([torch.randint(0,10000,(1,)).item(), torch.randint(0,10,(1,)).item()]) print(CentPoint) for p in range(10): NewPoint = [[0, 0] for i in range(K)] for i in range(len(viscosity)): mDis=1e9 mC=0 for j in range(len(CentPoint)): cp=CentPoint[j] D = dis([viscosity[1,i].int(), density[1,i].int()], cp) if mDis>D: mDis=D mC=j C[i]=mC NewPoint[mC][0]+=viscosity[1,i] NewPoint[mC][1]+=density[1,i] for i in range(K): CentPoint[i][0]=NewPoint[i][0]/num_1 CentPoint[i][1]=NewPoint[i][1]/num_1 print(CentPoint) cc=list(C) for i in range(len(viscosity)): if cc[i]==0: plt.plot(viscosity[1,i].item(), density[1,i].item(), 'r.') elif cc[i]==1: plt.plot(viscosity[1,i].item(), density[1,i].item(), 'g.') elif cc[i]==2: plt.plot(viscosity[1,i].item(), density[1,i].item(), 'b.') elif cc[i]==3: plt.plot(viscosity[1,i].item(), density[1,i].item(), color='pink', marker='.') elif cc[i]==4: plt.plot(viscosity[1,i].item(), density[1,i].item(), color='orange', marker='.') for CP in CentPoint: plt.plot(CP[0], CP[1], color='black', marker='X') plt.show()
好的,以下是对你的代码进行改进的建议:
1. 在代码开头,需要将导入模块的语句分行书写,以提高代码的可读性;
2. 在读取 Excel 表格时,建议使用相对路径,以使代码在其他环境中也能正常运行;
3. 在计算样本点到聚类中心的距离时,建议使用 NumPy 库提供的矩阵计算方法,以提高代码的效率;
4. 在绘制数据图形时,可以使用 Matplotlib 的颜色映射函数 `plt.cm`,以简化代码。
改进后的代码如下:
```python
import math
import matplotlib.pyplot as plt
import pandas as pd
import torch
import numpy as np
file_path = './data.xlsx'
raw_data = pd.read_excel(file_path, header=0)
data = raw_data.values
viscosity = data[:, :2]
density = data[:, :3]
num_1 = data[-1, 0]
C = torch.zeros(len(viscosity))
def dis(a, b):
return np.linalg.norm(a-b)
K = 4
CentPoint = []
for i in range(K):
CentPoint.append([torch.randint(0, 10000, (1,)).item(),
torch.randint(0, 10, (1,)).item()])
for p in range(10):
NewPoint = [[0, 0] for i in range(K)]
for i in range(len(viscosity)):
mDis = 1e9
mC = 0
for j in range(len(CentPoint)):
cp = CentPoint[j]
D = dis([viscosity[i, 1].item(), density[i, 1].item()], cp)
if mDis > D:
mDis = D
mC = j
C[i] = mC
NewPoint[mC][0] += viscosity[i, 1].item()
NewPoint[mC][1] += density[i, 1].item()
for i in range(K):
CentPoint[i][0] = NewPoint[i][0] / num_1
CentPoint[i][1] = NewPoint[i][1] / num_1
cmap = plt.cm.get_cmap('viridis', K)
for i in range(len(viscosity)):
plt.plot(viscosity[i, 1].item(), density[i, 1].item(), '.', color=cmap(int(C[i])))
for CP in CentPoint:
plt.plot(CP[0], CP[1], color='black', marker='X')
plt.show()
```
这段代码中,我们使用了 NumPy 库提供的 `linalg.norm()` 函数计算样本点到聚类中心的距离,使用了 Matplotlib 的 `cm.get_cmap()` 函数获取颜色映射,以简化绘图代码。
column = data.columns.tolist() fig = plt.figure(figsize=(12,4), dpi=128) for i in range(8): plt.subplot(2,4, i + 1) sns.boxplot(data=data[column[i]], orient="v",width=0.5) plt.ylabel(column[i], fontsize=12) plt.tight_layout() plt.show() #kdeplot column = data.columns.tolist() fig = plt.figure(figsize=(12,4), dpi=128) for i in range(8): plt.subplot(2,4, i + 1) sns.kdeplot(data=data[column[i]],color='blue',shade= True) plt.ylabel(column[i], fontsize=12) plt.tight_layout() plt.show() sns.pairplot(data[column],diag_kind='kde') plt.savefig('Scatter plot.jpg',dpi=256)
这段代码的作用是对"data"数据框的每个列进行数据可视化。
首先,通过"data.columns.tolist()"将"data"数据框的列名转换为列表,并将其存储在名为"column"的变量中。
然后,创建一个大小为(12, 4)且分辨率为128的图形对象,使用"plt.figure(figsize=(12,4), dpi=128)"。
接下来,使用循环遍历范围为8的整数,从1开始。在每次迭代中,使用"plt.subplot(2,4, i + 1)"创建一个2x4的子图网格,并选择当前迭代的子图。
然后,使用"sns.boxplot(data=data[column[i]], orient='v',width=0.5)"绘制第i个列的箱线图,其中"data=data[column[i]]"表示要绘制的数据,"orient='v'"表示箱线图的方向为垂直,"width=0.5"表示箱线图的宽度为0.5。
或者,使用"sns.kdeplot(data=data[column[i]],color='blue',shade=True)"绘制第i个列的核密度估计图,其中"data=data[column[i]]"表示要绘制的数据,"color='blue'"表示曲线的颜色为蓝色,"shade=True"表示在曲线下方填充阴影。
在每个子图中,使用"plt.ylabel(column[i], fontsize=12)"添加y轴标签,标签内容为当前迭代的列名。
通过"plt.tight_layout()"可以调整子图之间的间距和布局。
最后使用"plt.show()"显示图形。
另外,代码中还包含了一个额外的部分,使用"sns.pairplot(data[column],diag_kind='kde')"绘制了一个散点图矩阵,并选择了核密度估计作为对角线上的图形。然后使用"plt.savefig('Scatter plot.jpg',dpi=256)"将图形保存为名为"Scatter plot.jpg"的文件,分辨率为256 dpi。