# Calculate new centers
cluster_a_points = [data_points[i] for i, a in enumerate(assignments) if a == 'A']
cluster_b_points = [data_points[i] for i, a in enumerate(assignments) if a == 'B']
new_center_a = np.mean(cluster_a_points)
new_center_b = np.mean(cluster_b_points)
new_centers = np.array([new_center_a, new_center_b])
# Create the plot
fig, ax = plt.subplots(figsize=(12, 4))
# Plot data points with cluster colors
colors = ['red' if a == 'A' else 'green' for a in assignments]
for i, (point, color) in enumerate(zip(data_points, colors)):
ax.scatter(point, 0, s=100, c=color, alpha=0.7, zorder=3)
ax.annotate(f'{i+1}', (point, 0), xytext=(0, 15),
textcoords='offset points', ha='center', fontsize=10, fontweight='bold')
# Plot old centers (faded)
ax.scatter(initial_centers[0], 0, s=150, c='red', marker='x', linewidths=2,
zorder=2, alpha=0.5, label='Old Center A')
ax.scatter(initial_centers[1], 0, s=150, c='green', marker='x', linewidths=2,
zorder=2, alpha=0.5, label='Old Center B')
# Plot new centers
ax.scatter(new_centers[0], 0, s=200, c='red', marker='*', linewidths=3,
zorder=4, label='New Center A')
ax.scatter(new_centers[1], 0, s=200, c='green', marker='*', linewidths=3,
zorder=4, label='New Center B')
# Add labels for new centers
ax.annotate('A\'', (new_centers[0], 0), xytext=(0, -25),
textcoords='offset points', ha='center', fontsize=12, fontweight='bold', color='red')
ax.annotate('B\'', (new_centers[1], 0), xytext=(0, -25),
textcoords='offset points', ha='center', fontsize=12, fontweight='bold', color='green')
# Add horizontal x-axis line
ax.axhline(y=0, color='black', linewidth=2, zorder=1)
# Formatting
ax.set_xlim(0, 12)
ax.set_ylim(-0.5, 0.5)
ax.set_xlabel('Value')
ax.set_title('Step 3: Updated Centers (A\' = 1.7, B\' = 8.6)')
ax.grid(True, alpha=0.3)
ax.set_yticks([])
ax.legend(loc='upper right')
plt.tight_layout()
plt.show()
print(f"New Center A: {new_center_a:.1f}")
print(f"New Center B: {new_center_b:.1f}")