У меня есть двумерная матрица numpy, и я хочу создать дискретный график плотности, используя его. Дискретный в том смысле, что в каждой точке (i,j)
на графике должна быть размещена точка, цвет которой должен соответствовать значению (i,j)
-го элемента 2D-массива. Я не хочу использовать imshow
, потому что я не хочу никакой интерполяции, и я также хочу контролировать размер точек, которые нужно разместить.Дискретный график плотности в matplotlib
1
A
ответ
3
Вы пробовали imshow
с interpolation='nearest'
? Это близко к тому, что вы хотите?
import matplotlib.pyplot as plt
import numpy as np
data = np.arange(100).reshape(10, 10)
fig, ax = plt.subplots()
ax.imshow(data, interpolation='nearest')
plt.show()
0
Вы всегда можете сделать это явно для каждой точки, но это будет происходить медленно. Я думаю, что лучше всего делать это по строкам (держите слово y фиксированным) и использовать функцию scatter
.
import matplotlib.pylab as plt
from mpl_toolkits.mplot3d import Axes3D
n = 100
x = plt.linspace(0,5, n)
y = plt.linspace(0,5, n)
ax = plt.subplot(111)
for i in range(n):
y_fixed = y[i] * plt.ones(n)
z = [(abs(plt.cos(x[i])), 0.0, 0.5) for i in range(n)]
ax.scatter(x, y_fixed, c=z)
plt.show()
Размер также регулируется в этой усадьбе, используя s
аргумент.
Без каких-либо данных о том, как вы хотите указать цвет, я использовал значение RGB
. Возможно, вам придется нормализовать, однако c=
возьмет что-нибудь в значительной степени и превратит его в цвет, но это может быть не очень важно для вас.
Для более с разбросом увидеть демо-here
Я не могу понять, как реализовать это в моем случае, как у меня есть 2D массив. Не могли бы вы показать мне, как это сделать с помощью 2D-массива? – lovespeed
Вы берете фрагмент из вашего 2D-массива, соответствующий фиксированному 'y' (или' x'). И используйте это как аргумент цвета, например 'c = array [i]'. – Greg