code: def create_topic_clustering_after_graph(top_n):
      if (
          "Trend Clustering" not in gd["reports"].values
      ):  # no clustering data
          return None
      header = gd["reports"][7]
      scatter_series = gd[(gd["x_tar"] != -1) & (gd["x_tar"].notna())]
      phrases = scatter_series["tar_topic"].values
      x_a = scatter_series["x_tar"].values
      y_a = scatter_series["y_tar"].values
      valid_phrases, valid_x, valid_y = [], [], []
      ctr = 0
      for i in range(len(phrases)):
          if ctr == top_n:
              break
          phrase = phrases[i]
          if phrase in white_list:
              valid_phrases.append(phrase)
              valid_x.append(x_a[i])
              valid_y.append(y_a[i])
              ctr += 1
  
      source = ColumnDataSource(
          data=dict(x=valid_x, y=valid_y, topics=valid_phrases)
      )
  
      p = figure(
          title=header,
          plot_width=600,
          plot_height=400,
          tooltips="@topics",
      )
      p.circle(
          x="x", y="y", size=13, color="#335fa5", alpha=1, source=source
      )
  
      return p
  
imports: import csv
  import logging
  import time
  from os import path
  from os.path import isfile
  import pandas
  from bokeh.io import curdoc
  from bokeh.layouts import column, layout, WidgetBox
  from bokeh.models import ColumnDataSource, Div, Row, ranges, LabelSet, CDSView, IndexFilter
  from bokeh.models.widgets import DataTable, TableColumn, RadioGroup, Dropdown, Tabs, Panel, TextInput, Button, Slider
  from bokeh.plotting import figure
  from trend_analysis import analyze
  from nlp_architect import LIBRARY_OUT
label_desc: Use image node_id 12 for calling a global function with example usage: create_topic_clustering_after_graph(top_n) and returns: p, None