Линии сетки не отображаются

Я настроил следующий код для чтения в файле .graphml, предварительного расчета (собственных значений) и последующего построения результатов. Вот код, который у меня есть до сих пор:

import numpy as np
import networkx as nx
import matplotlib.pyplot as plt

# Read in the Data

G = nx.read_graphml("/home/user/DropBox_External_Datasets/JHU_Human_Brain/cat_brain_1.graphml")

nx.draw(G)
plt.savefig("test_graph.png")

Z = nx.to_numpy_matrix(G)

# Get Eigenvalues and Eigenvectors
# ----------------------------------------------------------------------------------
#
e_vals, e_vec = np.linalg.eigh(Z)

print("The eigenvalues of A are:", e_vals)
print("The size of the eigenvalues matrix is:", e_vals.shape)
# ----------------------------------------------------------------------------------

plt.plot(e_vals, 'g^')
plt.ylabel('Eigenvalues')
# plt.axis([-30, 300, -15, 30]) # Optimal settings for Rhesus data
# plt.axis([-0.07, 1, -0.2, 1.2])  # range to zoom in on cluster of points in Rhesus data

plt.grid(b=True, which='major', color='b', linestyle='-')
plt.show()

Но на графике не отображаются ни линии сетки, ни оси. Есть ли что-то еще, кроме plt.grid(), что мне нужно использовать?


person user3708902    schedule 02.07.2014    source источник
comment
Если вы говорите, что оси также не отображаются, то grid(), скорее всего, не виноват. Что произойдет, если вы создадите новую фигуру (plt.figure()) перед графиком e_vals? Я говорю это, потому что ничего не знаю об этом вызове отрисовки networkx, и я думаю, что иногда pyplot может запутаться.   -  person Ajean    schedule 03.07.2014


Ответы (1)


Это может помочь - я обнаружил, что отказ от общих команд pyplot - более надежный способ заставить все работать так, как ожидалось. Pyplot — это, по сути, большая оболочка для объектно-ориентированных вызовов. Я написал что-то, что должно быть эквивалентно:

import matplotlib.pyplot as plt

# ... your other code here

fig, ax = plt.subplots(ncols=1, nrows=1) # These arguments can be omitted for one
                                         # plot, I just include them for clarity
ax.plot(e_vals, 'g^')
ax.set_ylabel('Eigenvalues')

ax.grid(b=True, which='major', color='b', linestyle='-')

plt.show()
person Ajean    schedule 02.07.2014
comment
+1 к избеганию pyplot. Я позволяю себе использовать plt.subplots только для настройки фигур и осей. После этого я придерживаюсь объектно-ориентированного интерфейса. - person Paul H; 03.07.2014
comment
У меня не сработало, я думаю, моя проблема в том, что я делаю это в блокноте Databricks/Jupyter. - person information_interchange; 18.06.2019
comment
Мне было достаточно позвонить ax.grid (b=true) вместо ax.grid (). Это правильный способ использования : Если указаны какие-либо kwargs, предполагается, что вы хотите, чтобы сетка была включена, и b будет установлено значение True. Если b равно None и нет kwargs, это переключает видимость линий. - person mins; 13.11.2020