MatPlotLib: несколько наборов данных на одном графике рассеяния - PullRequest
57 голосов
/ 24 ноября 2010

Я хочу построить несколько наборов данных на одном графике рассеяния:

cases = scatter(x[:4], y[:4], s=10, c='b', marker="s")
controls = scatter(x[4:], y[4:], s=10, c='r', marker="o")

show()

Выше показаны только самые последние scatter()

Я также пробовал:

plt = subplot(111)
plt.scatter(x[:4], y[:4], s=10, c='b', marker="s")
plt.scatter(x[4:], y[4:], s=10, c='r', marker="o")
show()

Ответы [ 4 ]

90 голосов
/ 24 ноября 2010

Вам нужна ссылка на объект Axes, чтобы продолжить рисование на одном и том же участке.

import matplotlib.pyplot as plt

x = range(100)
y = range(100,200)
fig = plt.figure()
ax1 = fig.add_subplot(111)

ax1.scatter(x[:4], y[:4], s=10, c='b', marker="s", label='first')
ax1.scatter(x[40:],y[40:], s=10, c='r', marker="o", label='second')
plt.legend(loc='upper left');
plt.show()

enter image description here

14 голосов
/ 09 декабря 2017

Я сталкивался с этим вопросом, поскольку у меня была точно такая же проблема.Хотя принятый ответ работает хорошо, но с версией matplotlib 2.1.0, довольно просто иметь два графика рассеяния на одном графике без ссылки на Axes

import matplotlib.pyplot as plt

plt.scatter(x,y, c='b', marker='x', label='1')
plt.scatter(x, y, c='r', marker='s', label='-1')
plt.legend(loc='upper left')
plt.show()
5 голосов
/ 24 ноября 2010

Не знаю, у меня все работает нормально. Точные команды:

import scipy, pylab
ax = pylab.subplot(111)
ax.scatter(scipy.randn(100), scipy.randn(100), c='b')
ax.scatter(scipy.randn(100), scipy.randn(100), c='r')
ax.figure.show()
1 голос
/ 12 июля 2016

Вы также можете легко сделать это в Pandas, если ваши данные представлены в Dataframe, как описано здесь:

http://pandas.pydata.org/pandas-docs/version/0.15.0/visualization.html#scatter-plot

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...