Python PyPlot-设置绘图的网格线间距

Python PyPlot-设置绘图的网格线间距,python,matplotlib,networkx,Python,Matplotlib,Networkx,我有一个由Networkx创建的无向图,我正在使用pyplot显示该图,我希望允许用户指定网格线之间的间距。我不想手动输入刻度,因为这需要知道绘图的最终大小(如果有一种方法可以做到这一点,我想知道),它可能会根据显示的图形而变化 是否有任何方法允许您设置间距量?我找了好一阵子,什么也没找到,谢谢 下面的代码与绘图的创建有关,而不是图形 #Spacing between each line intervals = float(sys.argv[1]) nx.draw(displayGraph,

我有一个由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")

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

例如,您可以使用
xlim
获得x轴的范围,并使用用户指定的间隔,您应该能够自己使用
ax.axvline
绘制网格,如本例所示

希望这有帮助

(编辑)这是一个示例

from pylab import *

fig = figure()
ax = fig.add_subplot(111)

ax.plot([1,2,3, 15],[2,3,4, 25],'ro')
xmin,xmax = xlim()
user_interval = 1.5
for _x in np.arange(xmin, xmax, user_interval):
    ax.axvline(x=_x, ls='-')
draw()
您可以使用设置网格的间距。用户可以指定MultipleLocator的输入,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()

编辑

要将其与Networkx一起使用,您可以使用上述子图(或其他函数)创建轴,并将该轴传递给类似的对象

nx.draw(displayGraph, pos, ax=ax1, node_size = 10)
或者,您可以像在问题中一样调用nx.draw,然后使用它获取当前轴:

nx.draw(displayGraph, pos, node_size = 10)
ax1 = plt.gca()

不确定这是否违背了您不手动播放滴答声的愿望,但您可以使用
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='-')

你能分享你的一些代码吗?链接中的代码如何允许用户指定的间隔有点困惑?你能为我澄清一下吗?谢谢这看起来正是我需要的,只有一个问题。对于add_subplot(),在Networkx图形库处理绘图时,我的值应该是什么?您可以将轴传递给nx.draw(),也可以在绘图后获取当前轴。我编辑了我的答案以包含更多的细节。太好了,谢谢你的帮助。如果我有足够的重复,你会给+1。这工作非常完美!如果我可以删除轴标签(比如行号),这样我就有了行,那么这会是一个理想的选择,有什么建议吗?关于
ax.set\xticklabels([])和
ax.set\yticklabels([])
?可以工作,但仍然有一些烦人的地方。仅使用plt.grid('on')就可以得到更理想的结果(显然,使用正确的网格间距)这不是一个交易破坏者,最好避免:)
plt.tight_layout()
可以做到。或者
fig.subplot\u调整(左=0,右=1,下=0,上=1)