## 问题：在python matplotlib中绘制（x，y）坐标列表

``````xs = [x[0] for x in li]
ys = [x[1] for x in li]
plt.plot(xs, ys)``````

I have a list of pairs `(a, b)` that I would like to plot with `matplotlib` in python as actual x-y coordinates. Currently, it is making two plots, where the index of the list gives the x-coordinate, and the first plot’s y values are the `a`s in the pairs and the second plot’s y values are the `b`s in the pairs.

To clarify, my data looks like this: `li = [(a,b), (c,d), ... , (t, u)]` I want to do a one-liner that just calls `plt.plot()` incorrect. If I didn’t require a one-liner I could trivially do:

``````xs = [x[0] for x in li]
ys = [x[1] for x in li]
plt.plot(xs, ys)
``````

How can I get matplotlib to plot these pairs as x-y coordinates?

## 回答 0

``````import numpy as np
import matplotlib.pyplot as plt

N = 50
x = np.random.rand(N)
y = np.random.rand(N)

plt.scatter(x, y)
plt.show()``````

``x, y = zip(*li)``

``plt.scatter(*zip(*li))``

As per this example:

``````import numpy as np
import matplotlib.pyplot as plt

N = 50
x = np.random.rand(N)
y = np.random.rand(N)

plt.scatter(x, y)
plt.show()
``````

will produce:

To unpack your data from pairs into lists use `zip`:

``````x, y = zip(*li)
``````

So, the one-liner:

``````plt.scatter(*zip(*li))
``````

## 回答 1

``````import numpy as np
from matplotlib import pyplot as plt

data = np.array([
[1, 2],
[2, 3],
[3, 6],
])
x, y = data.T
plt.scatter(x,y)
plt.show()``````

If you have a numpy array you can do this:

``````import numpy as np
from matplotlib import pyplot as plt

data = np.array([
[1, 2],
[2, 3],
[3, 6],
])
x, y = data.T
plt.scatter(x,y)
plt.show()
``````

## 回答 2

``````plt . plot ( li [ : ] )

plt . show ( )``````

If you want to plot a single line connecting all the points in the list

``````plt.plot(li[:])

plt.show()
``````

This will plot a line connecting all the pairs in the list as points on a Cartesian plane from the starting of the list to the end. I hope that this is what you wanted.