Pyplotを使用して表示しているNetworkxによって作成された無向グラフがあり、ユーザーがグリッド線の間隔を指定できるようにしたい。表示されているグラフに基づいて変化する可能性のあるプロットの最終的なサイズを知る必要があるため(これを行う方法がある場合は知りたい)、手動でティックを入力したくありません。
間隔の量を設定できる方法はありますか?しばらく探していましたが、何も見つかりませんでした。ありがとうございます。
以下のコードは、グラフではなくプロットの作成に関連しています。
#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")
グリッドにユーザーが定義した間隔を設定する方法を見つける必要があります。私はそれを行う方法を見つけましたが、それはあなたが望むグリッド線の数を言うことにも依存しており、それは線がプロット上で等間隔に配置されない原因になります
これが手動でティックを操作したくないという希望に反するかどうかはわかりませんが、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='-')
ティッカー を使用して、グリッドの ティック位置 を設定できます。ユーザーは、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と一緒に使用するには、上記のようにサブプロット(または他の関数)を使用して軸を作成し、その軸をこのように draw に渡すことができます。
nx.draw(displayGraph, pos, ax=ax1, node_size = 10)
または、質問の場合と同じようにnx.drawを呼び出し、 gca を使用して、後で現在の軸を取得することもできます。
nx.draw(displayGraph, pos, node_size = 10)
ax1 = plt.gca()
たとえば、xlim
を使用してx軸の範囲を取得できます。ユーザーが指定した間隔で、この例のようにax.axvline
を使用して自分でグリッドを描画できるはずです https ://stackoverflow.com/a/9128244/566035
この助けを願っています。
(編集)ここにサンプルがあります。
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()