-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathplot_intuition.py
257 lines (231 loc) · 9.93 KB
/
plot_intuition.py
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
shape_vec = ['o', 'o', 'o', 'o', 'o', 'o', '^', '^', '^', '^', '^', '^', 's', 's', 's', 's', 's', 's']
edgecolor_vec = ['r', 'g', 'b', 'r', 'g', 'b', 'r', 'g', 'b', 'r', 'g', 'b', 'r', 'g', 'b', 'r', 'g', 'b']
facecolor_vec = ['r', 'g', 'b', 'none', 'none', 'none', 'r', 'g', 'b', 'none', 'none', 'none',
'r', 'g', 'b', 'none', 'none', 'none']
# Panel 1
cluster_mean = np.array([[1.0, 1.0], [2.0, 1.0], [3.0, 1.0], [1.5, 1.5], [2.5, 1.5], [3.5, 1.5],
[1.0, 2.0], [2.0, 2.0], [3.0, 2.0], [1.5, 2.5], [2.5, 2.5], [3.5, 2.5],
[1.0, 3.0], [2.0, 3.0], [3.0, 3.0], [1.5, 3.5], [2.5, 3.5], [3.5, 3.5]])
np.random.seed(1)
np.random.shuffle(cluster_mean)
fig, ax = plt.subplots(figsize=(6, 6))
ax.axis("off")
z = 0.2 * np.array([[0, 0], [-1, 0], [1, 0], [-0.5, 1], [0.5, 1], [-0.5, -1], [0.5, -1]])
for i in range(18):
# r = 0.33 * np.random.uniform(0, 1, 30); theta = 2 * np.pi * np.random.uniform(0, 1, 30)
# x = cluster_mean[i, 0] + r * np.sin(theta); y = cluster_mean[i, 1] + r * np.cos(theta)
x = cluster_mean[i, 0] + z[:, 0]
y = cluster_mean[i, 1] + z[:, 1]
s = shape_vec[i]
ec = edgecolor_vec[i]
fc = facecolor_vec[i]
# for xp, yp, m in zip(x, y, cluster):
# ax.scatter([xp], [yp], marker=m)
ax.scatter(x, y, marker=s, facecolors=fc, edgecolors=ec, s=100)
circle = plt.Circle((cluster_mean[i, 0], cluster_mean[i, 1]), 0.33, color='black', fill=False, ls='--')
ax.add_patch(circle)
plt.show()
# Panel 2
z = 0.14 * np.array([[-1, 4], [0, 4], [1, 4],
[-1.5, 3], [-0.5, 3], [0.5, 3], [1.5, 3],
[-2, 2], [-1, 2], [0, 2], [1, 2], [2, 2],
[-2.5, 1], [-1.5, 1], [-0.5, 1], [0.5, 1], [1.5, 1], [2.5, 1],
[-3, 0], [-2, 0], [-1, 0], [0, 0], [1, 0], [2, 0], [3, 0],
[-2.5, -1], [-1.5, -1], [-0.5, -1], [0.5, -1], [1.5, -1], [2.5, -1],
[-2, -2], [-1, -2], [0, -2], [1, -2], [2, -2],
[-1.5, -3], [-0.5, -3], [0.5, -3], [1.5, -3],
[-0.5, -4], [0.5, -4]])
z[:, 1] = 0.68 * z[:, 1]
cluster_mean = np.array([[0, 0], [0, 1], [0.9, 0.5]])
fig, ax = plt.subplots(figsize=(6, 6))
ax.axis("off")
edgecolor_vec = ['r', 'g', 'b', 'r', 'g', 'b']
facecolor_vec = ['r', 'g', 'b', 'none', 'none', 'none']
s = 'o'
z0 = z
np.random.shuffle(z0)
for i in range(6):
ec = edgecolor_vec[i]
fc = facecolor_vec[i]
for j in range(7):
x = cluster_mean[0, 0] + z0[7*i+j, 0]
y = cluster_mean[0, 1] + z0[7*i+j, 1]
ax.scatter(x, y, marker=s, facecolors=fc, edgecolors=ec, s=100)
circle = plt.Circle((cluster_mean[0, 0], cluster_mean[0, 1]), 0.48, color='black', fill=False, ls='--')
ax.add_patch(circle)
s = '^'
z0 = z
np.random.shuffle(z0)
for i in range(6):
ec = edgecolor_vec[i]
fc = facecolor_vec[i]
for j in range(7):
x = cluster_mean[1, 0] + z0[7*i+j, 0]
y = cluster_mean[1, 1] + z0[7*i+j, 1]
ax.scatter(x, y, marker=s, facecolors=fc, edgecolors=ec, s=100)
circle = plt.Circle((cluster_mean[1, 0], cluster_mean[1, 1]), 0.48, color='black', fill=False, ls='--')
ax.add_patch(circle)
s = 's'
z0 = z
np.random.shuffle(z0)
for i in range(6):
ec = edgecolor_vec[i]
fc = facecolor_vec[i]
for j in range(7):
x = cluster_mean[2, 0] + z0[7*i+j, 0]
y = cluster_mean[2, 1] + z0[7*i+j, 1]
ax.scatter(x, y, marker=s, facecolors=fc, edgecolors=ec, s=100)
circle = plt.Circle((cluster_mean[2, 0], cluster_mean[2, 1]), 0.48, color='black', fill=False, ls='--')
ax.add_patch(circle)
plt.show()
# Panel 3
fig, ax = plt.subplots(figsize=(6, 6))
ax.axis("off")
shape_vec = ['o', 'o', '^', '^', 's', 's']
facecolor_vec = ['r', 'none', 'r', 'none', 'r', 'none']
edgecolor_vec = ['r', 'r', 'r', 'r', 'r', 'r']
z0 = z
np.random.shuffle(z0)
for i in range(6):
s = shape_vec[i]
ec = edgecolor_vec[i]
fc = facecolor_vec[i]
for j in range(7):
x = cluster_mean[0, 0] + z0[7*i+j, 0]
y = cluster_mean[0, 1] + z0[7*i+j, 1]
ax.scatter(x, y, marker=s, facecolors=fc, edgecolors=ec, s=100)
circle = plt.Circle((cluster_mean[0, 0], cluster_mean[0, 1]), 0.48, color='black', fill=False, ls='--')
ax.add_patch(circle)
facecolor_vec = ['g', 'none', 'g', 'none', 'g', 'none']
edgecolor_vec = ['g', 'g', 'g', 'g', 'g', 'g']
z0 = z
np.random.shuffle(z0)
for i in range(6):
s = shape_vec[i]
ec = edgecolor_vec[i]
fc = facecolor_vec[i]
for j in range(7):
x = cluster_mean[1, 0] + z0[7*i+j, 0]
y = cluster_mean[1, 1] + z0[7*i+j, 1]
ax.scatter(x, y, marker=s, facecolors=fc, edgecolors=ec, s=100)
circle = plt.Circle((cluster_mean[1, 0], cluster_mean[1, 1]), 0.48, color='black', fill=False, ls='--')
ax.add_patch(circle)
facecolor_vec = ['b', 'none', 'b', 'none', 'b', 'none']
edgecolor_vec = ['b', 'b', 'b', 'b', 'b', 'b']
z0 = z
np.random.shuffle(z0)
for i in range(6):
s = shape_vec[i]
ec = edgecolor_vec[i]
fc = facecolor_vec[i]
for j in range(7):
x = cluster_mean[2, 0] + z0[7*i+j, 0]
y = cluster_mean[2, 1] + z0[7*i+j, 1]
ax.scatter(x, y, marker=s, facecolors=fc, edgecolors=ec, s=100)
circle = plt.Circle((cluster_mean[2, 0], cluster_mean[2, 1]), 0.48, color='black', fill=False, ls='--')
ax.add_patch(circle)
plt.show()
# Panel 4
z1 = 0.13 * np.array([[-2, 4], [-1, 4], [0, 4], [1, 4], [2, 4],
[-2.5, 3], [-1.5, 3], [-0.5, 3], [0.5, 3], [1.5, 3], [2.5, 3],
[-3, 2], [-2, 2], [-1, 2], [0, 2], [1, 2], [2, 2], [3, 2],
[-3.5, 1], [-2.5, 1], [-1.5, 1], [-0.5, 1], [0.5, 1], [1.5, 1], [2.5, 1], [3.5, 1],
[-4, 0], [-3, 0], [-2, 0], [-1, 0], [0, 0], [1, 0], [2, 0], [3, 0], [4, 0],
[-3.5, -1], [-2.5, -1], [-1.5, -1], [-0.5, -1], [0.5, -1], [1.5, -1], [2.5, -1], [3.5, -1],
[-3, -2], [-2, -2], [-1, -2], [0, -2], [1, -2], [2, -2], [3, -2],
[-2.5, -3], [-1.5, -3], [-0.5, -3], [0.5, -3], [1.5, -3], [2.5, -3],
[-2, -4], [-1, -4], [0, -4], [1, -4], [2, -4],
[-0.5, -5], [0.5, -5]])
z2 = 0.13 * np.array([[-0.5, 5], [0.5, 5],
[-2, 4], [-1, 4], [0, 4], [1, 4], [2, 4],
[-2.5, 3], [-1.5, 3], [-0.5, 3], [0.5, 3], [1.5, 3], [2.5, 3],
[-3, 2], [-2, 2], [-1, 2], [0, 2], [1, 2], [2, 2], [3, 2],
[-3.5, 1], [-2.5, 1], [-1.5, 1], [-0.5, 1], [0.5, 1], [1.5, 1], [2.5, 1], [3.5, 1],
[-4, 0], [-3, 0], [-2, 0], [-1, 0], [0, 0], [1, 0], [2, 0], [3, 0], [4, 0],
[-3.5, -1], [-2.5, -1], [-1.5, -1], [-0.5, -1], [0.5, -1], [1.5, -1], [2.5, -1], [3.5, -1],
[-3, -2], [-2, -2], [-1, -2], [0, -2], [1, -2], [2, -2], [3, -2],
[-2.5, -3], [-1.5, -3], [-0.5, -3], [0.5, -3], [1.5, -3], [2.5, -3],
[-2, -4], [-1, -4], [0, -4], [1, -4], [2, -4]])
assert len(z1[:, 0]) == 63
assert len(z2[:, 0]) == 63
z1[:, 1] = 0.83 * z1[:, 1]
z2[:, 1] = 0.83 * z2[:, 1]
cluster_mean = np.array([[0, 0], [0, 1.21]])
fig, ax = plt.subplots(figsize=(6, 6))
ax.axis("off")
shape_vec = ['o', 'o', 'o', '^', '^', '^', 's', 's', 's']
edgecolor_vec = ['r', 'g', 'b', 'r', 'g', 'b', 'r', 'g', 'b']
z0 = z1
np.random.shuffle(z0)
for i in range(9):
s = shape_vec[i]
ec = edgecolor_vec[i]
fc = 'none'
for j in range(7):
x = cluster_mean[0, 0] + z0[7*i+j, 0]
y = cluster_mean[0, 1] + z0[7*i+j, 1]
ax.scatter(x, y, marker=s, facecolors=fc, edgecolors=ec, s=100)
circle = plt.Circle((0, -0.03), 0.6, color='black', fill=False, ls='--')
ax.add_patch(circle)
shape_vec = ['o', 'o', 'o', '^', '^', '^', 's', 's', 's']
edgecolor_vec = ['r', 'g', 'b', 'r', 'g', 'b', 'r', 'g', 'b']
facecolor_vec = ['r', 'g', 'b', 'r', 'g', 'b', 'r', 'g', 'b']
z0 = z2
np.random.shuffle(z0)
for i in range(9):
s = shape_vec[i]
ec = edgecolor_vec[i]
fc = facecolor_vec[i]
for j in range(7):
x = cluster_mean[1, 0] + z0[7*i+j, 0]
y = cluster_mean[1, 1] + z0[7*i+j, 1]
ax.scatter(x, y, marker=s, facecolors=fc, edgecolors=ec, s=100)
circle = plt.Circle((0, 1.23), 0.6, color='black', fill=False, ls='--')
ax.add_patch(circle)
ax.set_ylim([-0.65, 1.95])
plt.show()
# # OLD
# # Panel 3
# cluster_mean = np.array([[1.0, 1.0], [1.0, 2.0], [1.8, 1.5], [1.0, 1.0], [1.0, 2.0], [1.8, 1.5],
# [1.0, 1.0], [1.0, 2.0], [1.8, 1.5], [1.0, 1.0], [1.0, 2.0], [1.8, 1.5],
# [1.0, 1.0], [1.0, 2.0], [1.8, 1.5], [1.0, 1.0], [1.0, 2.0], [1.8, 1.5]])
# fig, ax = plt.subplots(figsize=(6, 6))
# ax.axis("off")
# for i in range(18):
# r = 0.5 * np.random.uniform(0, 1, 20)
# theta = 2 * np.pi * np.random.uniform(0, 1, 20)
# x = cluster_mean[i, 0] + r * np.sin(theta)
# y = cluster_mean[i, 1] + r * np.cos(theta)
#
# s = shape_vec[i]
# ec = edgecolor_vec[i]
# fc = facecolor_vec[i]
#
# ax.scatter(x, y, marker=s, facecolors=fc, edgecolors=ec)
# circle = plt.Circle((cluster_mean[i, 0], cluster_mean[i, 1]), 0.5, color='black', fill=False, ls='--')
# ax.add_patch(circle)
# plt.show()
#
# # Panel 4
# cluster_mean = np.array([[1.0, 1.0], [1.0, 1.0], [1.0, 1.0], [1.0, 2.0], [1.0, 2.0], [1.0, 2.0],
# [1.0, 1.0], [1.0, 1.0], [1.0, 1.0], [1.0, 2.0], [1.0, 2.0], [1.0, 2.0],
# [1.0, 1.0], [1.0, 1.0], [1.0, 1.0], [1.0, 2.0], [1.0, 2.0], [1.0, 2.0]])
# fig, ax = plt.subplots(figsize=(6, 6))
# ax.axis("off")
# for i in range(18):
# r = 0.5 * np.random.uniform(0, 1, 20)
# theta = 2 * np.pi * np.random.uniform(0, 1, 20)
# x = cluster_mean[i, 0] + r * np.sin(theta)
# y = cluster_mean[i, 1] + r * np.cos(theta)
#
# s = shape_vec[i]
# ec = edgecolor_vec[i]
# fc = facecolor_vec[i]
#
# ax.scatter(x, y, marker=s, facecolors=fc, edgecolors=ec)
# circle = plt.Circle((cluster_mean[i, 0], cluster_mean[i, 1]), 0.5, color='black', fill=False, ls='--')
# ax.add_patch(circle)
# plt.show()