PyPlot - 为绘图设置网格线间距

HFu*_*her 5 python matplotlib networkx

我有一个由Networkx创建的无向图,我使用pyplot显示,我想让用户指定网格线之间的间距.我不想手动输入刻度,因为这需要知道绘图的最终大小(如果有办法这样做我想知道),这可能会根据显示的图表而有所不同.

是否有任何方法可以设置间距量?我找了一会儿,找不到任何东西,谢谢.

下面的代码涉及创建绘图而不是图形.

#Spacing between each line
intervals = float(sys.argv[1])

nx.draw(displayGraph, pos, node_size = 10)
plt.axis('on')
plt.grid('on')
plt.savefig("test1.png")
Run Code Online (Sandbox Code Playgroud)

我需要找到一种方法来使网格具有由用户定义的间隔间隔.我已经找到了这样做的方法,但它还依赖于你想要多少网格线,这会导致线条在绘图上不均匀分布

Mol*_*lly 12

您可以使用自动收报机设置网格的刻度线位置.用户可以指定MultipleLocator的输入,该输入将"在视图间隔中设置每个整数倍的整数." 这是一个例子:

from matplotlib import pyplot as plt
from matplotlib.ticker import MultipleLocator
import numpy as np

# Two example plots
fig = plt.figure()
ax1 = fig.add_subplot(2,2,1)
ax2 = fig.add_subplot(2,2,2)

spacing = 0.5 # This can be your user specified spacing. 
minorLocator = MultipleLocator(spacing)
ax1.plot(9 * np.random.rand(10))
# Set minor tick locations.
ax1.yaxis.set_minor_locator(minorLocator)
ax1.xaxis.set_minor_locator(minorLocator)
# Set grid to use minor tick locations. 
ax1.grid(which = 'minor')

spacing = 1
minorLocator = MultipleLocator(spacing)
ax2.plot(9 * np.random.rand(10))
# Set minor tick locations.
ax2.yaxis.set_minor_locator(minorLocator)
ax2.xaxis.set_minor_locator(minorLocator)
# Set grid to use minor tick locations. 
ax2.grid(which = 'minor')

plt.show()
Run Code Online (Sandbox Code Playgroud)

两个具有不同网格的子图.

编辑

要将其与Networkx一起使用,您可以使用上面的子图(或其他一些函数)创建轴,并将这些轴传递给这样绘制.

nx.draw(displayGraph, pos, ax=ax1, node_size = 10)
Run Code Online (Sandbox Code Playgroud)

或者您可以像在问题中一样调用nx.draw,然后使用gca获取当前轴:

nx.draw(displayGraph, pos, node_size = 10)
ax1 = plt.gca()
Run Code Online (Sandbox Code Playgroud)


tmd*_*son 11

不确定这是否违反了您不想手动玩蜱的愿望,但您可以使用matplotlib.ticker将蜱设置为给定的间隔:

import matplotlib.pyplot as plt
import matplotlib.ticker as plticker

fig,ax=plt.subplots()

#Spacing between each line
intervals = float(sys.argv[1])

loc = plticker.MultipleLocator(base=intervals)
ax.xaxis.set_major_locator(loc)
ax.yaxis.set_major_locator(loc)

# Add the grid
ax.grid(which='major', axis='both', linestyle='-')
Run Code Online (Sandbox Code Playgroud)