#python #matplotlib #animation #title #subplot
#python #matplotlib #Анимация #Название #подзаголовок
Вопрос:
Кто-нибудь знает, почему y-метки, x-метки и субтитры не будут отображаться при анимации фигуры? Это работает, когда я использовал анимацию.TimedAnimation.инициализация, но не тогда, когда я переписал код в анимации.Анимация функции. Изображения, когда я запускаю программу с обеими функциями: С анимацией.Анимация
с анимацией.TimedAnimation.init
Код ниже:
from forest import Forest
from matplotlib import pyplot as plt
from matplotlib import animation
import numpy as np
from matplotlib.lines import Line2D
# Define parameters
p = 0.01
f = 0.4
lattice_size = 100
iterations = 100
forest = Forest(lattice_size, p, f)
def animation_function(i):
# Update forest state
if i % 2 == 1:
forest.next_time_step_part_1()
else:
forest.next_time_step_part_2()
# Get lattice information
lattice = forest.lattice
tree_positions_x = []
tree_positions_y = []
fire_positions_x = []
fire_positions_y = []
for x in range(lattice_size):
for y in range(lattice_size):
value = lattice[x,y]
if value == 1:
tree_positions_x.append(x)
tree_positions_y.append(y)
elif value == 2:
fire_positions_x.append(x)
fire_positions_y.append(y)
# Update scatterplott
scatter_trees.set_offsets(np.c_[tree_positions_x, tree_positions_y])
scatter_trees.set_sizes(
np.random.randint(6, 12, len(tree_positions_x)))
scatter_fires.set_offsets(np.c_[fire_positions_x, fire_positions_y])
ax1.set_title('Total nr lightnings: {} | Total nr fires: {}'.format(
forest.nr_lightnings, forest.nr_fires))
# Update graph
if i % 2 == 1:
# Get iteration nr
last_iteration = forest.iteration[-1]
current_iteration = last_iteration 1
forest.iteration.append(current_iteration)
# Get nr of trees
current_nr_trees = forest.nr_trees
forest.nr_trees_collection.append(current_nr_trees)
if forest.max_nr_trees < current_nr_trees:
forest.max_nr_trees = current_nr_trees
# Update tree plot
tree_line.set_data(
forest.iteration, forest.nr_trees_collection)
ax2.set_title('Iteration: {} | Total nr trees: | {}'.format(
current_iteration, current_nr_trees))
# Update graph
padding1 = 0.1*current_iteration
padding2 = 0.1*forest.max_nr_trees
ax2.set_xlim(0, current_iteration padding1)
ax2.set_ylim(0, forest.max_nr_trees padding2)
return ax1, ax2
# Setup figure
fig = plt.figure(figsize=(14, 6))
fig.suptitle("{}x{} Forest | Probability of tree growth: {}% | Probability of lightning: {}%".format(
lattice_size, lattice_size, p*100, f*100))
# Add axes
ax1 = fig.add_subplot(1, 2, 1)
ax2 = fig.add_subplot(1, 2, 2)
# Setup ax1
ax1.set_xlim(-1, lattice_size)
ax1.set_ylim(-1, lattice_size)
#ax1.set_aspect('equal', adjustable='box')
ax1.set_facecolor("#543327")
ax1.set_xlabel('x')
ax1.set_ylabel('y')
scatter_trees = ax1.scatter([], [], facecolors="g", marker='^')
scatter_fires = ax1.scatter(
[], [], facecolors="r", marker='^', s=1)
# Setup ax2
ax2.set_xlabel('t')
ax2.set_ylabel('Nr of trees')
ax2.set_xlim(0, 1)
ax2.set_ylim(0, 1)
tree_line = Line2D([], [], color='green')
ax2.add_line(tree_line)
anim = animation.FuncAnimation(fig, animation_function,
frames=iterations, interval=20, blit=True)
plt.show()
Комментарии:
1. У меня те же проблемы. Вы когда-нибудь решали эту проблему?
2. Нет, извините, я не решил это…