提问者:小点点

如何在python中使用pyplot按数组绘制图形?


我正在学习构建GCN,现在我实现了下面的代码。

我在jupyter笔记本上运行它。

在[1]

import numpy as np
from networkx import karate_club_graph, to_numpy_matrix
zkc = karate_club_graph()
order = sorted(list(zkc.nodes()))
A = to_numpy_matrix(zkc, nodelist=order)
I = np.eye(zkc.number_of_nodes())
A_hat = A + I
D_hat = np.array(np.sum(A_hat, axis=0))[0]
D_hat = np.matrix(np.diag(D_hat))

在[2]

X = np.matrix([
        [i, -i]
        for i in range(A.shape[0])
    ], dtype=float)

在[3]

 W = np.matrix([
         [1, -1],
         [-1, 1]
     ])

在[4]

  W_1 = np.random.normal(
    loc=0, scale=1, size=(zkc.number_of_nodes(), 4))
  W_2 = np.random.normal(
    loc=0, size=(W_1.shape[1], 2))

在[5]

  def gcn_layer(A_hat, D_hat, X, W):
      return D_hat**-1 * A_hat * X * W
  H_1 = gcn_layer(A_hat, D_hat, I, W_1)
  H_2 = gcn_layer(A_hat, D_hat, H_1, W_2)
      output = H_2

在[6]

 feature_representations = {
  node: np.array(output)[node] 
  for node in zkc.nodes()}

这是所有的代码,我想创建这样的图形,但我不知道如何使用matplotlib上的数组来绘制它。谢谢你。

在此处输入图像描述


共1个答案

匿名用户

据我所知,您希望从feature_表示中绘制值,但问题是,在字典中,值是数组。为了使用matplotlib。pyplot。适当分散(https://matplotlib.org/3.1.1/api/_as_gen/matplotlib.pyplot.scatter.html),必须将字典转换为两个数组,这两个数组可以作为x和y参数传递。

可以在[7]单元格中尝试以下代码:

from matplotlib import pyplot as plt
arrays = feature_representations.values()
X = [el[0] for el in arrays]
Y = [el[0] for el in arrays]
plt.scatter(X, Y)

它给出以下输出: