code: def _draw_barplot_plotly(self, fig, grids):
      df = self.plot_obj.count_df
      bar_style = self.plot_style.bar
  
      fig.add_trace(
          go.Bar(
              x=df["x"],
              y=df["count"],
              text=df["count"],
              textposition="outside",
              width=bar_style["width"],
              name="count",
              marker=dict(
                  color=bar_style["color"],
                  opacity=0.5,
              ),
              hovertemplate="%{text}",
          ),
          secondary_y=False,
          **grids,
      )
      fig.update_yaxes(
          title_text="count",
          range=[0, df["count"].max() * 1.2],
          secondary_y=False,
          **grids,
      )
  
imports: from .styles import _prepare_plot_style, _axes_modify, _display_percentile, _modify_legend_axes, _get_axes_label
  import numpy
  from itertools import cycle
  import plotly.express
  import matplotlib
  import matplotlib.pyplot
  from matplotlib.gridspec import GridSpecFromSubplotSpec
  from mpl_toolkits.axes_grid1.inset_locator import inset_axes
  import matplotlib.patheffects
  import plotly.graph_objects
label_desc: Use image node_id 3 for calling the InfoPlotEngine obj's underlying member method code with example usage: obj._draw_barplot_plotly(fig, grids) without return types