matplotlib 设置打印的网格线间距

nkhmeac6  于 2023-10-24  发布在  其他
关注(0)|答案(3)|浏览(133)

我有一个由Networkx创建的无向图,我正在使用pyplot显示,我想允许用户指定网格线之间的间距。我不想手动输入刻度,因为这需要知道图的最终大小(如果有办法做到这一点,我想知道),这可能会根据显示的图形而有所不同。
有没有什么方法可以让你设置间距量?我找了一会儿,没有找到任何东西,谢谢。
下面的代码与绘图的创建有关,而不是图形。

  1. #Spacing between each line
  2. intervals = float(sys.argv[1])
  3. nx.draw(displayGraph, pos, node_size = 10)
  4. plt.axis('on')
  5. plt.grid('on')
  6. plt.savefig("test1.png")

我需要找到一种方法,让网格具有由用户定义的间距,我已经找到了方法,但它依赖于你想要多少网格线,这会导致线在图上的间距不均匀

atmip9wb

atmip9wb1#

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

  1. import matplotlib.pyplot as plt
  2. import matplotlib.ticker as plticker
  3. fig,ax=plt.subplots()
  4. #Spacing between each line
  5. intervals = float(sys.argv[1])
  6. loc = plticker.MultipleLocator(base=intervals)
  7. ax.xaxis.set_major_locator(loc)
  8. ax.yaxis.set_major_locator(loc)
  9. # Add the grid
  10. ax.grid(which='major', axis='both', linestyle='-')
wqnecbli

wqnecbli2#

您可以使用ticker来设置网格的tick locations。用户可以指定MultipleThreshold的输入,这将“在视图间隔中为每个整数设置一个tick,该整数是base的倍数”。下面是一个例子:

  1. from matplotlib import pyplot as plt
  2. from matplotlib.ticker import MultipleLocator
  3. import numpy as np
  4. # Two example plots
  5. fig = plt.figure()
  6. ax1 = fig.add_subplot(2,2,1)
  7. ax2 = fig.add_subplot(2,2,2)
  8. spacing = 0.5 # This can be your user specified spacing.
  9. minorLocator = MultipleLocator(spacing)
  10. ax1.plot(9 * np.random.rand(10))
  11. # Set minor tick locations.
  12. ax1.yaxis.set_minor_locator(minorLocator)
  13. ax1.xaxis.set_minor_locator(minorLocator)
  14. # Set grid to use minor tick locations.
  15. ax1.grid(which = 'minor')
  16. spacing = 1
  17. minorLocator = MultipleLocator(spacing)
  18. ax2.plot(9 * np.random.rand(10))
  19. # Set minor tick locations.
  20. ax2.yaxis.set_minor_locator(minorLocator)
  21. ax2.xaxis.set_minor_locator(minorLocator)
  22. # Set grid to use minor tick locations.
  23. ax2.grid(which = 'minor')
  24. plt.show()

编辑

要将此沿着用于Networkx,您可以使用上述子图(或其他函数)创建轴,并像这样传递该轴进行绘制。

  1. nx.draw(displayGraph, pos, ax=ax1, node_size = 10)

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

  1. nx.draw(displayGraph, pos, node_size = 10)
  2. ax1 = plt.gca()
展开查看全部
5rgfhyps

5rgfhyps3#

例如,您可以使用xlim来获取x轴的范围,并使用用户指定的间隔,您应该能够使用ax.axvline自己绘制网格,如本例中的https://stackoverflow.com/a/9128244/566035
希望这对你有帮助。
(edit)这里有一个例子。

  1. from pylab import *
  2. fig = figure()
  3. ax = fig.add_subplot(111)
  4. ax.plot([1,2,3, 15],[2,3,4, 25],'ro')
  5. xmin,xmax = xlim()
  6. user_interval = 1.5
  7. for _x in np.arange(xmin, xmax, user_interval):
  8. ax.axvline(x=_x, ls='-')
  9. draw()

相关问题