| | import matplotlib.pyplot as plt |
| | import numpy as np |
| |
|
| | def draw_trajectory(embeddings, save_path=None, x_min=None, x_max=None, y_min=None, y_max=None): |
| | fig = plt.figure() |
| | plt.quiver(embeddings[:-1, 0], embeddings[:-1, 1], embeddings[1:, 0]-embeddings[:-1, 0], embeddings[1:, 1]-embeddings[:-1, 1],scale_units='xy', angles='xy', scale=1) |
| | if x_min is None: |
| | x_min = embeddings[:, 0].min() |
| | x_max = embeddings[:, 0].max() |
| | y_min = embeddings[:, 1].min() |
| | y_max = embeddings[:, 1].max() |
| |
|
| | plt.xlim((x_min-0.1*(x_max-x_min), x_max+0.1*(x_max-x_min))) |
| | plt.ylim((y_min-0.1*(y_max-y_min), y_max+0.1*(y_max-y_min))) |
| | plt.scatter(embeddings[0,0], embeddings[0,1],marker='^') |
| | plt.scatter(embeddings[-1,0],embeddings[-1,1],marker='o') |
| | |
| | print(embeddings[0]) |
| |
|
| |
|
| | if save_path is not None: |
| | plt.savefig(save_path) |
| |
|
| | def draw_two_trajectories(embeddings1, embeddings2, save_path=None, save_in_one=True): |
| |
|
| | x_min = min(embeddings1[:, 0].min(),embeddings2[:, 0].min()) |
| | x_max = max(embeddings1[:, 0].max(), embeddings2[:, 0].max()) |
| | y_min = min(embeddings1[:, 1].min(), embeddings2[:, 1].min()) |
| | y_max = max(embeddings1[:, 1].max(), embeddings2[:, 1].max()) |
| | if save_in_one: |
| | fig = plt.figure() |
| | fig, ax = plt.subplots(1, 1, figsize=(8, 8)) |
| |
|
| | plot1 = ax.quiver(embeddings1[:-1, 0], embeddings1[:-1, 1], embeddings1[1:, 0]-embeddings1[:-1, 0], embeddings1[1:, 1]-embeddings1[:-1, 1],scale_units='xy', angles='xy', scale=1, color='r') |
| | plot2 = ax.quiver(embeddings2[:-1, 0], embeddings2[:-1, 1], embeddings2[1:, 0]-embeddings2[:-1, 0], embeddings2[1:, 1]-embeddings2[:-1, 1],scale_units='xy', angles='xy', scale=1, color='b') |
| |
|
| | ax.set_xlim((x_min-0.1*(x_max-x_min), x_max+0.1*(x_max-x_min))) |
| | ax.set_ylim((y_min-0.1*(y_max-y_min), y_max+0.1*(y_max-y_min))) |
| | ax.set_title("DVI vs DVI-T trajectory visualization") |
| | ax.legend([plot1, plot2], ["DVI", "DVI-T"]) |
| |
|
| | else: |
| | fig = plt.figure() |
| | ax = fig.add_subplot(121) |
| | ax.quiver(embeddings1[:-1, 0], embeddings1[:-1, 1], embeddings1[1:, 0]-embeddings1[:-1, 0], embeddings1[1:, 1]-embeddings1[:-1, 1],scale_units='xy', angles='xy', scale=1) |
| |
|
| | ax.set_xlim((x_min-0.1*(x_max-x_min), x_max+0.1*(x_max-x_min))) |
| | ax.set_ylim((y_min-0.1*(y_max-y_min), y_max+0.1*(y_max-y_min))) |
| | ax.set_title("DVI") |
| |
|
| | ax = fig.add_subplot(122) |
| | ax.quiver(embeddings2[:-1, 0], embeddings2[:-1, 1], embeddings2[1:, 0]-embeddings2[:-1, 0], embeddings2[1:, 1]-embeddings2[:-1, 1],scale_units='xy', angles='xy', scale=1) |
| |
|
| | ax.set_xlim((x_min-0.1*(x_max-x_min), x_max+0.1*(x_max-x_min))) |
| | ax.set_ylim((y_min-0.1*(y_max-y_min), y_max+0.1*(y_max-y_min))) |
| | ax.set_title("DVI-T") |
| | if save_path is not None: |
| | plt.savefig(save_path) |
| |
|
| |
|
| | if __name__ == "__main__": |
| | |
| | embeddings_x = np.arange(5) |
| | embeddings_y = np.arange(2,7,1) |
| | embeddings_z = np.arange(-2, -7, -1) |
| | embeddings1 = np.concatenate((embeddings_x[None,], embeddings_y[None,]), axis=0) |
| | embeddings1 = embeddings1.transpose() |
| | embeddings2 = np.concatenate((embeddings_x[None,], embeddings_z[None,]), axis=0) |
| | embeddings2 = embeddings2.transpose() |
| | draw_trajectory(embeddings1) |
| | draw_two_trajectories(embeddings1, embeddings2) |
| | |
| |
|
| |
|
| |
|