<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def silhouette_n_clusters(data, k_min, k_max, distance='euclidean'):
 """ Computes and plot the silhouette score vs number of clusters graph to help selecting the number of clusters visually :param data: The data object :param k_min: lowerbound of the cluster range :param k_max: upperbound of the cluster range :param distance: the distance metric, 'euclidean' by default :return: """

        k_range = range(k_min, k_max)

        k_means_var = [Clustering.kmeans(k).fit(data) for k in k_range]

        silhouette_scores = [obj.silhouette_score(data=data, metric=distance) for obj in k_means_var]

        fig = plt.figure()
        ax = fig.add_subplot(111)
        ax.plot(k_range, silhouette_scores, 'b*-')
        ax.set_ylim((-1, 1))
        plt.grid(True)
        plt.xlabel('n_clusters')
        plt.ylabel('The silhouette score')
        plt.title('Silhouette score vs. k')
        plt.show()