code: def draw_core(self, color, force_no_log, x_limit):
      data = self.data
      lrh = data.histogram
      line_data = np.array(data.kde)
  
      if len(lrh) == 0:
          raise NoItemsError("NumericalStats")
  
      sum_perc = 0
      max_height = 0
      for i in lrh:
          sum_perc += i[2]
          max_height = max(i[2], max_height)
  
      perc = [i[2] / sum_perc for i in lrh]
  
      sorted_perc = sorted(perc)
  
      x = [i[0] for i in lrh]
      w = [(i[1] - i[0]) * 0.95 for i in lrh]
      h = [i[2] for i in lrh]
      if force_no_log:
          plt.bar(x=x, height=h, width=w, align="edge", color=color)
          plt.plot(line_data[:, 0], line_data[:, 1], color="k")
      else:
          if (
              len(sorted_perc) < 2
              or sorted_perc[-1] - sorted_perc[-2] > 0.5
          ):
              plt.bar(
                  x=x,
                  height=h,
                  width=w,
                  align="edge",
                  log=True,
                  color=color,
              )
          else:
              plt.bar(x=x, height=h, width=w, align="edge", color=color)
              plt.plot(line_data[:, 0], line_data[:, 1])
      if x_limit:
          plt.xlim((data.mean - data.sd * 2, data.mean + data.sd * 2))
  
imports: import matplotlib.pyplot
  import numpy
  import pandas
  import seaborn
  import xai.constants
  from wordcloud import WordCloud
  import shap
  from xai.graphs.basic_graph import Graph
  from typing import List
  from collections import Counter
  import operator
  from xai.data.exceptions import NoItemsError
label_desc: Use image node_id 2 for calling the KdeDistribution obj's underlying member method code with example usage: obj.draw_core(color, force_no_log, x_limit) without return types