Как заполнить разбросанную область в matplotlib? - PullRequest
2 голосов
/ 09 января 2012

У меня есть файл данных, содержащий случайные разбросанные данные по плоскости x, y.Все, что я хочу, это заполнить разбросанную область сплошным цветом.Мои данные не отсортированы.Я пытался использовать scatterplot в matplotlib, но количество точек в моем файле данных довольно большое, поэтому построение их в разбросе делает результирующий график довольно большим по размеру.Рассеянные данные образуют небольшие островки над плоскостью x, y.

Ответы [ 2 ]

3 голосов
/ 10 января 2012

Вы можете рассчитать гистограмму (2D) значений x, y, используя метод numpy histogram2d . Затем вы строите массив, который имеет значение true для всех ненулевых бинов и false для всех нулевых бинов. Вы можете контролировать разрешение гистограммы с помощью параметра bins. Этот метод возвращает кортеж из 3 массивов: двумерную гистограмму и два одномерных массива, соответствующие шагам ячейки вдоль каждого «ребра» (x, затем y). Вы можете контролировать значения шага, используя параметр range.

Например:

import matplotlib.pyplot as plt
import numpy as np
np.random.seed(101)
x = np.random.normal(0,1,10000)
y = np.random.normal(0,1,10000)

hist,xedge,yedge= np.histogram2d(x,y,bins=100,range=[[-4,4],[-4,4]])

plt.imshow(hist==0,
           origin='lower',
           cmap=plt.gray(),
           extent=[xedge[0],xedge[-1],yedge[0],yedge[-1]])

plt.savefig('hist2d.png')
plt.show()

В результате:

enter image description here

Черные точки показывают, где у вас есть какие-либо данные, белые точки - там, где нет данных. Гистограмма представлена ​​с использованием метода imshow, который используется для построения изображений или матриц. По умолчанию он устанавливает начало координат слева вверху, поэтому вам нужно либо изменить параметр origin='lower', либо вы хотите соответствующим образом настроить параметр extent, который управляет значениями диапазона: [intial x, final x, initial у, окончательный у]. Вы можете управлять цветовой схемой, настраивая цветовую карту .

Как упоминает @joaquin в комментариях, вы также можете просто построить imshow(hist), чтобы увидеть полный диапазон значений (тепловая карта), а не 0 или 1.

1 голос
/ 10 января 2012
import numpy as np
import matplotlib.pylab as plt
x=np.random.rand(10)
y=np.random.rand(10)
plt.figure()
plt.fill(x,y,'b')
plt.show()

what I got

Существует также заполнение между двумя строками документация по matplotlib для них обоих

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