PyPlot - 设置绘图的网格线间距
PyPlot - Setting grid line spacing for plot
我有一个由 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
自己绘制网格,如本例所示
希望对您有所帮助。
(edit) 这是一个示例。
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()
您可以对网格使用 ticker to set the tick locations。用户可以指定 MultipleLocator 的输入,这将 "Set a tick on every integer that is multiple of base in the view interval." 这是一个示例:
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 一起使用,您可以使用上面的子图(或其他函数)创建坐标轴,然后像这样将该坐标轴传递给 draw。
nx.draw(displayGraph, pos, ax=ax1, node_size = 10)
或者您可以像在问题中那样调用 nx.draw,然后使用 gca 获取当前轴:
nx.draw(displayGraph, pos, node_size = 10)
ax1 = plt.gca()
不确定这是否违背了您不想手动玩 ticks 的愿望,但您可以使用 matplotlib.ticker
将 ticks 设置为您给定的间隔:
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='-')
我有一个由 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
自己绘制网格,如本例所示
希望对您有所帮助。
(edit) 这是一个示例。
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()
您可以对网格使用 ticker to set the tick locations。用户可以指定 MultipleLocator 的输入,这将 "Set a tick on every integer that is multiple of base in the view interval." 这是一个示例:
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 一起使用,您可以使用上面的子图(或其他函数)创建坐标轴,然后像这样将该坐标轴传递给 draw。
nx.draw(displayGraph, pos, ax=ax1, node_size = 10)
或者您可以像在问题中那样调用 nx.draw,然后使用 gca 获取当前轴:
nx.draw(displayGraph, pos, node_size = 10)
ax1 = plt.gca()
不确定这是否违背了您不想手动玩 ticks 的愿望,但您可以使用 matplotlib.ticker
将 ticks 设置为您给定的间隔:
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='-')