Home > Enterprise >  What is being plotted by plt.plot with a tuple argument?
What is being plotted by plt.plot with a tuple argument?

Time:02-22

This code snippet:

import matplotlib.pyplot as plt

plt.plot(([1, 2, 3], [1, 2, 3]))
plt.show()

produces:

enter image description here

What function is being plotted here? Is this use case described in matplotlib documentation?


This snippet:

plt.plot(([1, 2, 3], [1, 2, 3], [2, 3, 4]))

produces:

enter image description here

CodePudding user response:

From the new test case you provided we can see it is picking the i-th element on the list and building a series.
So it ends up plotting the series y = {1, 1, 2}, y = {2, 2 , 3} and y = {3, 3, 4}.

On a more generic note, we can assume that using a tuple of list will plot multiple series.
Honestly, it doesn't look that user friendly to write the input like that but there might be some case where it is more convenient.


The x-values are picked by a default according to the docs:

The horizontal / vertical coordinates of the data points. x values are optional and default to range(len(y)).

CodePudding user response:

Calling plt.plot(y) is calling plot in the Axes class. Looking at the source code, the key description closest to your problem states the following for plotting multiple sets of data:

        - If *x* and/or *y* are 2D arrays a separate data set will be drawn
          for every column. If both *x* and *y* are 2D, they must have the
          same shape. If only one of them is 2D with shape (N, m) the other
          must have length N and will be used for every data set m.
          Example:
          >>> x = [1, 2, 3]
          >>> y = np.array([[1, 2], [3, 4], [5, 6]])
          >>> plot(x, y)
          is equivalent to:
          >>> for col in range(y.shape[1]):
          ...     plot(x, y[:, col])

The main difference here compared to your example is that x is implicitly defined based on the length of your tuple (described elsewhere in the documentation) and that you are using a tuple rather than an np.array. I tried digging further into the source code to see where tuples would become arrays. In particular at line 1632: lines = [*self._get_lines(*args, data=data, **kwargs)] seems to be where the different lines are likely generated, but that is as far as I got.

Of note, this is one of three ways to plot multiple lines of data, this being the most compact.

  • Related