code: def bargraph(data, max_key_width=30):
      
      lines = []
      max_length = min(max(len(key) for key in data.keys()), max_key_width)
      max_val = max(data.values())
      max_val_length = max(
          len(_style_value(val))
          for val in data.values())
      term_width = get_terminal_size()[0]
      max_bar_width = term_width - MARGIN - (max_length + 3 + max_val_length + 3)
      template = u"{key:{key_width}} [ {value:{val_width}} ] {bar}"
      for key, value in data.items():
          try:
              bar = int(math.ceil(max_bar_width * value / max_val)) * TICK
          except ZeroDivisionError:
              bar = ''
          line = template.format(
              key=key[:max_length],
              value=_style_value(value),
              bar=bar,
              key_width=max_length,
              val_width=max_val_length
          )
          lines.append(line)
      return '\n'.join(lines)
docs: Return a bar graph as a string, given a dictionary of data.