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

#python #matplotlib #gridlines

#python #matplotlib #линии сетки

Вопрос:

Я настроил следующий код для чтения в файле .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() , что мне нужно использовать?

Ответ №1:

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

 import matplotlib.pyplot as plt

# ... your other code here

# Using subplots
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()
  

Комментарии:

1. Для меня было достаточно вызова ax.grid (b=true) вместо ax.grid () . Кажется, это правильный способ его использования : » Если предоставлены какие-либо kwargs, предполагается, что вы хотите, чтобы сетка была включена, и b будет установлено значение True. Если b равно None и нет kwargs, это изменяет видимость линий. »

2. Также хочу добавить, что размещение ax.plot(...) ниже ax.grid(b=1) закроет линии сетки. Таким образом, plot следует использовать перед grid.