class_docstr: Create a visualization of a semiotic square.  Requires Corpus to have
  at least three categories.
  >>> newsgroups_train = fetch_20newsgroups(subset='train',
  ...   remove=('headers', 'footers', 'quotes'))
  >>> vectorizer = CountVectorizer()
  >>> X = vectorizer.fit_transform(newsgroups_train.data)
  >>> corpus = st.CorpusFromScikit(
  ...         X=X,
  ...         y=newsgroups_train.target,
  ...         feature_vocabulary=vectorizer.vocabulary_,
  ...         category_names=newsgroups_train.target_names,
  ...         raw_texts=newsgroups_train.data
  ...         ).build()
  >>> semseq = SemioticSquare(corpus,
  ...         category_a = 'alt.atheism',
  ...         category_b = 'soc.religion.christian',
  ...         neutral_categories = ['talk.religion.misc']
  ... )
  >>> # A simple HTML table
  >>> html = SemioticSquareViz(semseq).to_html()
  >>> # The table with an interactive scatterplot below it
  >>> html = st.produce_semiotic_square_explorer(semiotic_square,
  ...                                            x_label='More Atheism, Less Xtnity',
  ...                                            y_label='General Religious Talk')
class_docstr_tok: ["Create","a","visualization","of","a","semiotic","square",".","Requires","Corpus","to","have","at","least","three","categories",".",">",">",">","newsgroups_train","=","fetch_20newsgroups","(","subset='train","'",",","...","remove=","(","'headers","'",",","'footers","'",",","'quotes","'",")",")",">",">",">","vectorizer","=","CountVectorizer","(",")",">",">",">","X","=","vectorizer.fit_transform","(","newsgroups_train.data",")",">",">",">","corpus","=","st.CorpusFromScikit","(","...","X=X",",","...","y=newsgroups_train.target",",","...","feature_vocabulary=vectorizer.vocabulary_",",","...","category_names=newsgroups_train.target_names",",","...","raw_texts=newsgroups_train.data","...",")",".build","(",")",">",">",">","semseq","=","SemioticSquare","(","corpus",",","...","category_a","=","'alt.atheism","'",",","...","category_b","=","'soc.religion.christian","'",",","...","neutral_categories","=","[","'talk.religion.misc","'","]","...",")",">",">",">","#","A","simple","HTML","table",">",">",">","html","=","SemioticSquareViz","(","semseq",")",".to_html","(",")",">",">",">","#","The","table","with","an","interactive","scatterplot","below","it",">",">",">","html","=","st.produce_semiotic_square_explorer","(","semiotic_square",",","...","x_label='More","Atheism",",","Less","Xtnity","'",",","...","y_label='General","Religious","Talk","'",")"]
code: def _build_axes(self, scorer):
      if scorer is None:
          scorer = self.scorer
      tdf = self._get_term_doc_count_df()
      counts = tdf.sum(axis=1)
      tdf["x"] = self._get_x_axis(scorer, tdf)
      tdf["x"][np.isnan(tdf["x"])] = self.scorer.get_default_score()
      tdf["y"] = self._get_y_axis(scorer, tdf)
      tdf["y"][np.isnan(tdf["y"])] = self.scorer.get_default_score()
      tdf["counts"] = counts
      return tdf[["x", "y", "counts"]]
  
imports: import numpy
  import pandas
  from scattertext.termranking import AbsoluteFrequencyRanker
  from scattertext.termscoring.RankDifference import RankDifference
label_desc: Use image node_id 8 for calling the SemioticSquare obj's underlying member method code with example usage: obj._build_axes(scorer) and returns: tdf