Untitled
unknown
plain_text
a year ago
2.6 kB
5
Indexable
import matplotlib.pyplot as plt
import matplotlib.patches as patches
# Create a figure and axis
fig, ax = plt.subplots(figsize=(10, 6))
# Define colors and positions
colors = {
'Cu': 'brown',
'H': 'blue',
'N': 'green',
'O': 'red'
}
positions = {
'Cu': (1, 4),
'HNO3_1': [(3, 5), (4, 5), (5, 5)],
'HNO3_2': [(3, 4.5), (4, 4.5), (5, 4.5)],
'HNO3_3': [(3, 4), (4, 4), (5, 4)],
'HNO3_4': [(3, 3.5), (4, 3.5), (5, 3.5)],
'Cu2+': (7, 4),
'NO3_1': [(9, 4.5), (10, 4.5), (11, 4.5)],
'NO3_2': [(9, 3.5), (10, 3.5), (11, 3.5)],
'NO2_1': [(13, 5), (14, 5)],
'NO2_2': [(13, 4), (14, 4)],
'H2O_1': [(16, 5), (17, 5)],
'H2O_2': [(16, 4), (17, 4)]
}
# Draw reactants (Before)
# Cu
ax.add_patch(patches.Circle(positions['Cu'], 0.3, color=colors['Cu'], label='Cu'))
ax.text(*positions['Cu'], 'Cu', ha='center', va='center', color='white')
# HNO3 molecules
for i in range(1, 5):
for idx, atom in enumerate(['H', 'N', 'O']):
x, y = positions[f'HNO3_{i}'][idx]
ax.add_patch(patches.Circle((x, y), 0.3, color=colors[atom]))
ax.text(x, y, atom, ha='center', va='center', color='white')
# Draw products (After)
# Cu2+
ax.add_patch(patches.Circle(positions['Cu2+'], 0.3, color=colors['Cu'], label='Cu2+'))
ax.text(*positions['Cu2+'], 'Cu2+', ha='center', va='center', color='white')
# NO3- molecules
for i in range(1, 3):
for idx, atom in enumerate(['N', 'O', 'O']):
x, y = positions[f'NO3_{i}'][idx]
ax.add_patch(patches.Circle((x, y), 0.3, color=colors[atom]))
ax.text(x, y, atom, ha='center', va='center', color='white')
# NO2 molecules
for i in range(1, 3):
for idx, atom in enumerate(['N', 'O']):
x, y = positions[f'NO2_{i}'][idx]
ax.add_patch(patches.Circle((x, y), 0.3, color=colors[atom]))
ax.text(x, y, atom, ha='center', va='center', color='white')
# H2O molecules
for i in range(1, 3):
for idx, atom in enumerate(['H', 'O']):
x, y = positions[f'H2O_{i}'][idx]
ax.add_patch(patches.Circle((x, y), 0.3, color=colors[atom]))
ax.text(x, y, atom, ha='center', va='center', color='white')
# Add labels for sections
ax.text(2, 6, 'Before Reaction', ha='center', fontsize=12, fontweight='bold')
ax.text(14, 6, 'After Reaction', ha='center', fontsize=12, fontweight='bold')
# Set limits, aspect ratio, and remove axes
ax.set_xlim(0, 18)
ax.set_ylim(2, 7)
ax.set_aspect('equal')
ax.axis('off')
# Show the plot
plt.show()
Editor is loading...
Leave a Comment