#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.