我正在阅读this网站并找到以下代码:
for i in centroids.keys():
plt.scatter(*centroids[i], color=colmap[i])
我理解*
用于收集任意长度的参数,因此我们不必明确指定所有参数,对吧?
但为什么这个人在这里写*
?
特别是因为删除*
后,该行似乎产生了相同的结果。
完整的代码:
## Initialisation
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
df = pd.DataFrame({
'x': [12, 20, 28, 18, 29, 33, 24, 45, 45, 52, 51, 52, 55, 53, 55, 61, 64, 69, 72],
'y': [39, 36, 30, 52, 54, 46, 55, 59, 63, 70, 66, 63, 58, 23, 14, 8, 19, 7, 24]
})
np.random.seed(200)
k = 3
# centroids[i] = [x, y]
centroids = {
i+1: [np.random.randint(0, 80), np.random.randint(0, 80)]
for i in range(k)
}
fig = plt.figure(figsize=(5, 5))
plt.scatter(df['x'], df['y'], color='k')
colmap = {1: 'r', 2: 'g', 3: 'b'}
for i in centroids.keys():
plt.scatter(*centroids[i], color=colmap[i])
plt.xlim(0, 80)
plt.ylim(0, 80)
plt.show()
答案 0 :(得分:1)
Axes.scatter(x, y, ...)
有两个参数x和y。
删除星号时,您只有一个参数,因此plt.scatter(centroids[i], color=colmap[i])
应该抛出TypeError: scatter() takes at least 2 arguments (1 given)
。
另一种方法是在参数之前拆分参数,
x,y = centroids[i]
plt.scatter(x,y, color=colmap[i])