code: def canvas_points(self):
          
  
          if self.chart():
              x_axis_min = self.chart().x_lower_limit()
              y_axis_min = self.chart().y_lower_limit()
              x_axis_max = self.chart().x_upper_limit()
              y_axis_max = self.chart().y_upper_limit()
              chart_width = self.chart().width()
              chart_height = self.chart().height()
              horizontal_padding = self.chart().horizontal_padding()
              vertical_padding = self.chart().vertical_padding()
              horizontal_margin_pixels = horizontal_padding * chart_width
              vertical_margin_pixels = vertical_padding * chart_height
              x_axis_pixels = chart_width - (2 * horizontal_margin_pixels)
              y_axis_pixels = chart_height - (2 * vertical_margin_pixels)
              x_axis_span = x_axis_max - x_axis_min
              y_axis_span = y_axis_max - y_axis_min
              x_pixels_per_point = x_axis_pixels / x_axis_span
              y_pixels_per_point = y_axis_pixels / y_axis_span
              data = []
              for x, y in self.data():
                  relative_x, relative_y = x - x_axis_min, y - y_axis_min
                  data.append((
                   (relative_x * x_pixels_per_point) + horizontal_margin_pixels,
                   chart_height - ((relative_y * y_pixels_per_point) + vertical_margin_pixels)
                  ))
              return tuple(data)
docs: Calculates the coordinates that the data should use to paint itself
          to its associated :py:class:`.AxisChart`. This is used internally to
          create the chart.
  
          :rtype: ``tuple``