from mpl_toolkits.mplot3d import Axes3D

def biplot_3d_with_arrows(score, coeff, diabetes_data, ax):
    xs = score[:,0]
    ys = score[:,1]
    zs = score[:,2]
    n = coeff.shape[0]

    # Plotting points for diabetes and non-diabetes cases
    ax.scatter(score[diabetes_data == 1, 0], score[diabetes_data == 1, 1], score[diabetes_data == 1, 2], color='red', s=5, label='Diabetes')
    ax.scatter(score[diabetes_data == 0, 0], score[diabetes_data == 0, 1], score[diabetes_data == 0, 2], color='blue', s=5, label='Non-Diabetes')

    # Plotting the feature vectors as arrows
    for i in range(n):
        ax.quiver(0, 0, 0, coeff[i,0], coeff[i,1], coeff[i,2], color='black', arrow_length_ratio=0.05)

    ax.set_xlabel("PC0")
    ax.set_ylabel("PC1")
    ax.set_zlabel("PC2")
    ax.legend()

# Correcting the error by using the correct variable for diabetes data
diabetes_data = data['Diabetes_binary']

# Re-creating two 3D plots for better visibility
fig = plt.figure(figsize=(16, 8))

# Plot for Diabetes cases
ax1 = fig.add_subplot(121, projection='3d')
biplot_3d_with_arrows(principal_components[diabetes_data == 1, 0:3], np.transpose(pca.components_[0:3, :]), diabetes_data[diabetes_data == 1], ax1)
ax1.set_title('Diabetes Cases')

# Plot for Non-Diabetes cases
ax2 = fig.add_subplot(122, projection='3d')
biplot_3d_with_arrows(principal_components[diabetes_data == 0, 0:3], np.transpose(pca.components_[0:3, :]), diabetes_data[diabetes_data == 0], ax2)
ax2.set_title('Non-Diabetes Cases')

plt.show()