code: def bar(df, figsize=(24, 10), fontsize=16, labels=None, log=False, color='dimgray', inline=False,
          filter=None, n=0, p=0, sort=None):
      nullity_counts = len(df) - df.isnull().sum()
      df = nullity_filter(df, filter=filter, n=n, p=p)
      df = nullity_sort(df, sort=sort)
      plt.figure(figsize=figsize)
      (nullity_counts / len(df)).plot(kind='bar', figsize=figsize, fontsize=fontsize, log=log, color=color)
      ax1 = plt.gca()
      axes = [ax1]
      if labels or (labels is None and len(df.columns) <= 50):
          ax1.set_xticklabels(ax1.get_xticklabels(), rotation=45, ha='right', fontsize=fontsize)
          ax2 = ax1.twinx()
          axes.append(ax2)
          if not log:
              ax1.set_ylim([0, 1])
              ax2.set_yticks(ax1.get_yticks())
              ax2.set_yticklabels([int(n*len(df)) for n in ax1.get_yticks()], fontsize=fontsize)
          else:
              ax2.set_yscale('log')
              ax2.set_ylim(ax1.get_ylim())
              ax2.set_yticklabels([int(n*len(df)) for n in ax1.get_yticks()], fontsize=fontsize)
      else:
          ax1.set_xticks([])
      ax3 = ax1.twiny()
      axes.append(ax3)
      ax3.set_xticks(ax1.get_xticks())
      ax3.set_xlim(ax1.get_xlim())
      ax3.set_xticklabels(nullity_counts.values, fontsize=fontsize, rotation=45, ha='left')
      ax3.grid(False)
      for ax in axes:
          ax.spines['top'].set_visible(False)
          ax.spines['right'].set_visible(False)
          ax.spines['bottom'].set_visible(False)
          ax.spines['left'].set_visible(False)
          ax.xaxis.set_ticks_position('none')
          ax.yaxis.set_ticks_position('none')
      if inline:
          plt.show()
      else:
          return ax1