code: def map(self, data, vars, idx):
          
          idx = np.asarray(idx)
          # discrete scales change the dtype
          # from category to int. Use a new dataframe
          # to collect these results.
          # Using `type` preserves the subclass of pd.DataFrame
          df = type(data)(index=data.index)
          discrete_cols = []
  
          # Loop through each variable, mapping across each scale,
          # then joining back into the copy of the data
          for col in vars:
              use_df = array_kind.discrete(data[col])
              if use_df:
                  discrete_cols.append(col)
              for i, sc in enumerate(self, start=1):
                  bool_idx = (i == idx)
                  results = sc.map(data.loc[bool_idx, col])
                  if use_df:
                      df.loc[bool_idx, col] = results
                  else:
                      data.loc[bool_idx, col] = results
  
          for col in discrete_cols:
              data[col] = df[col]
docs: Map the data on the scales
          The scales should be for the same aesthetic
          e.g. x scales, y scales, color scales, ...
  
          Parameters
          ----------
          data : dataframe
              data with columns to map
              This is modified inplace
          vars : list | tuple
              columns to map
          idx : array-like
              indices that link the data points to the
              scales. These start at 1, so subtract 1 to
              get the true index into the scales array