尝试使用更多 OOP 方法,使用图形和子图。例如,
for mol in mols:
for energy, density in data:
fig = plt.figure()
ax = fig.addsubplot(111)
ax.plot(density, energy, 'ro')
ax.set_xlabel(...)
ax.set_ylabel(...)
[a.label.set_color('black') for a in (ax.xaxis, ax.yaxis)]
# more spines and axis tinkering
fig.savefig(mol+".png")
这样,您就可以为每个能量/密度图创建一个新图形。
Edit:
更好的选择是在循环外部创建图形和轴,并在每次绘图之前清除循环。谢谢@Rutger Kassies
fig = plt.figure()
ax = fig.addsubplot(111)
for mol in mols:
for energy, density in data:
ax.cla() # or ax.clear()
ax.plot(density, energy, 'ro')
ax.set_xlabel(...)
ax.set_ylabel(...)
[a.label.set_color('black') for a in (ax.xaxis, ax.yaxis)]
# more spines and axis tinkering
fig.savefig(mol+".png")
Edit2:
根据@tcaswell 的建议进行更新。
# Create the figure and subplot
fig = plt.figure()
ax = fig.addsubplot(111)
# Tinker with labels and spines
ax.set_xlabel(...)
ax.set_ylabel(...)
[a.label.set_color('black') for a in (ax.xaxis, ax.yaxis)]
...
# Plot data and save figures
for mol in mols:
for energy, density in data:
ax.cla() # or ax.clear()
p, = ax.plot(density, energy, 'ro')
fig.savefig(mol+".png")
p.remove() # removes specific plot from figure
请注意,这只会为每个图形渲染一条密度/能量线。如果你想每个图有多条线,请执行类似的操作
# same preamble
for mol in mols:
lines = []
for energy, density in data:
ax.cla() # or ax.clear()
p, = ax.plot(density, energy, 'ro')
lines.append(p)
fig.savefig(mol+".png")
[p.remove() for p in lines]