in poincare_maps.py [0:0]
def plot_poincare_disc(x, labels=None, title_name=None,
labels_name='labels', labels_order=None, labels_pos=None, labels_text=None,
file_name=None, coldict=None,
d1=4.5, d2=4.0, fs=9, ms=20,
u=None, v=None, alpha=1.0,
col_palette=plt.get_cmap("tab10"), print_labels=True,
bbox=(1.3, 0.7), leg=True, ft='pdf'):
idx = np.random.permutation(len(x))
df = pd.DataFrame(x[idx, :], columns=['pm1', 'pm2'])
fig = plt.figure(figsize=(d1, d2))
ax = plt.gca()
circle = plt.Circle((0, 0), radius=1, fc='none', color='black')
ax.add_patch(circle)
ax.plot(0, 0, '.', c=(0, 0, 0), ms=4)
if title_name:
ax.set_title(title_name, fontsize=fs)
if not (labels is None):
df[labels_name] = labels[idx]
if labels_order is None:
labels_order = np.unique(labels)
if coldict is None:
coldict = dict(zip(labels_order, col_palette[:len(labels)]))
sns.scatterplot(x="pm1", y="pm2", hue=labels_name,
hue_order=labels_order,
palette=coldict,
alpha=alpha, edgecolor="none",
data=df, ax=ax, s=ms)
if leg:
ax.legend(fontsize=fs, loc='outside', bbox_to_anchor=bbox, facecolor='white')
else:
ax.legend_.remove()
else:
sns.scatterplot(x="pm1", y="pm2",
data=df, ax=ax, s=ms)
if leg == False:
ax.legend_.remove()
if not (u is None):
a, b = get_geodesic_parameters(u, v)
circle_geo = plt.Circle((-a/2, -b/2), radius=np.sqrt(a**2/4 + b**2/4 - 1), fc='none', color='grey')
ax.add_patch(circle_geo)
fig.tight_layout()
ax.axis('off')
ax.axis('equal')
if print_labels:
if labels_text is None:
labels_list = np.unique(labels)
else:
labels_list = np.unique(labels_text)
if labels_pos is None:
labels_pos = {}
for l in labels_list:
# i = np.random.choice(np.where(labels == l)[0])
ix_l = np.where(labels == l)[0]
Dl = poincare_distance(th.DoubleTensor(x[ix_l, :])).numpy()
i = ix_l[np.argmin(Dl.sum(axis=0))]
labels_pos[l] = i
for l in labels_list:
ax.text(x[labels_pos[l], 0], x[labels_pos[l], 1], l, fontsize=fs)
ax.set_ylim([-1.01, 1.01])
ax.set_xlim([-1.01, 1.01])
plt.tight_layout()
if file_name:
if ft == 'png':
plt.savefig(file_name + '.' + ft, format=ft, dpi=300)
else:
plt.savefig(file_name + '.' + ft, format=ft)
return labels_pos