使用 networkx 和 matplotlib 绘制多个图和文本
Plotting multiple plots and text with networkx and matplotlib
我正在调用函数 nx.draw
来绘制图表,例如:
我想画一个图,将三个这样的图画成一条直线,中间有一个 =
和 \cup
符号来表示一个是另外两个的并集。
例如这样的事情:
如何使用 matplotlib 制作这个?
我试过了
import networkx as nx
import matplotlib.pyplot as plt
G=nx.grid_2d_graph(1,5)
plt.subplot(151)
draw_model(composite_argument)
ax = plt.subplot(152)
ax.text(60, 60,"=")
ax.set_xlim(0, 100)
ax.set_ylim(0, 100)
plt.subplot(153)
draw_model(argument1)
ax = plt.subplot(154)
ax.text(60, 60,"U")
ax.set_xlim(0, 100)
ax.set_ylim(0, 100)
plt.subplot(155)
draw_model(argument2)
这导致了一个非常奇怪的情节
你显然在里面做错了draw_model()
。也许你叫 plt.figure()
或 plt.show()
?
无论如何,推荐的创建子图的方法是通过plt.subplots(...)
。让 networkx 绘制到子图中的推荐方法是通过 nx.draw(...., ax=...)
.
请注意,默认情况下,子图在 x 和 y 方向上的轴限制为 0 和 1。许多绘图函数会自动更新轴限制,但 ax.text()
不会(这使得注释靠近边界而不移动它们)。
这是一些示例代码。
from matplotlib import pyplot as plt
import networkx as nx
fig, axs = plt.subplots(ncols=5, figsize=(14, 4), gridspec_kw={'width_ratios': [4, 1, 4, 1, 4]})
nx.draw_circular(nx.complete_graph(5), ax=axs[0])
axs[1].text(0.5, 0.5, '<', size=50, ha='center', va='center')
axs[1].axis('off')
nx.draw_circular(nx.complete_graph(7), ax=axs[2])
axs[3].text(0.5, 0.5, '<', size=50, ha='center', va='center')
axs[3].axis('off')
nx.draw_circular(nx.complete_graph(9), ax=axs[4])
plt.show()
我正在调用函数 nx.draw
来绘制图表,例如:
我想画一个图,将三个这样的图画成一条直线,中间有一个 =
和 \cup
符号来表示一个是另外两个的并集。
例如这样的事情:
如何使用 matplotlib 制作这个?
我试过了
import networkx as nx
import matplotlib.pyplot as plt
G=nx.grid_2d_graph(1,5)
plt.subplot(151)
draw_model(composite_argument)
ax = plt.subplot(152)
ax.text(60, 60,"=")
ax.set_xlim(0, 100)
ax.set_ylim(0, 100)
plt.subplot(153)
draw_model(argument1)
ax = plt.subplot(154)
ax.text(60, 60,"U")
ax.set_xlim(0, 100)
ax.set_ylim(0, 100)
plt.subplot(155)
draw_model(argument2)
这导致了一个非常奇怪的情节
你显然在里面做错了draw_model()
。也许你叫 plt.figure()
或 plt.show()
?
无论如何,推荐的创建子图的方法是通过plt.subplots(...)
。让 networkx 绘制到子图中的推荐方法是通过 nx.draw(...., ax=...)
.
请注意,默认情况下,子图在 x 和 y 方向上的轴限制为 0 和 1。许多绘图函数会自动更新轴限制,但 ax.text()
不会(这使得注释靠近边界而不移动它们)。
这是一些示例代码。
from matplotlib import pyplot as plt
import networkx as nx
fig, axs = plt.subplots(ncols=5, figsize=(14, 4), gridspec_kw={'width_ratios': [4, 1, 4, 1, 4]})
nx.draw_circular(nx.complete_graph(5), ax=axs[0])
axs[1].text(0.5, 0.5, '<', size=50, ha='center', va='center')
axs[1].axis('off')
nx.draw_circular(nx.complete_graph(7), ax=axs[2])
axs[3].text(0.5, 0.5, '<', size=50, ha='center', va='center')
axs[3].axis('off')
nx.draw_circular(nx.complete_graph(9), ax=axs[4])
plt.show()