Создание сетки с градиентом цвета на основе набора данных в python matplotlib - PullRequest
1 голос
/ 11 апреля 2019

У меня есть словарь кортежей из двух неотрицательных целых чисел (a, b), где a и b оба не больше 20. Словарь сопоставляет каждый кортеж со значением с плавающей точкой от нуля до единицы.Я хотел бы создать двумерную сетку, в которой единичный квадрат в i-м столбце и j-й строке (соответствующий кортежу (i, j)) окрашен в оттенки серого между белым и черным и пропорционаленего значение с плавающей запятой.

Чтобы уточнить, мой словарь выглядит примерно так:

dict={(0, 0) : 0.04679,
      (0, 2) : 0.10936,
      (0, 4) : 0.17872000000000005,
      (2, 4) : 0.15046000000000004,
      (4, 4) : 0.026240000000000003,
      (1, 1) : 0.02055,
      (1, 2) : 0.10275
      ...
      }

Я не уверен, как идти об этом.Любая помощь будет оценена!

1 Ответ

1 голос
/ 11 апреля 2019

Я уверен, что есть более чистый способ сделать это, но это работает -

import matplotlib.pyplot as plt
import numpy as np

d={(0, 0) : 0.04679,
   (0, 2) : 0.10936,
   (0, 4) : 0.17872000000000005,
   (2, 4) : 0.15046000000000004,
   (4, 4) : 0.026240000000000003,
   (1, 1) : 0.02055,
   (1, 2) : 0.10275
   (3, 3) : 0.84,
   (3, 2) : 0.62
}

x = []
y = []
v = []
for e in d.items():
    x.append(e[0][0])
    y.append(e[0][1])
    v.append(e[1])
m = np.zeros((max(x)+1, max(y)+1))
for ii in range(len(v)):
    m[x[ii]][y[ii]] = v[ii]
plt.matshow(m, cmap=plt.get_cmap('gray'), vmin=0.0, vmax=1.0)
plt.show()

image

Идея здесь состоит в том, чтобы разобрать словарь в двумерный массив, который затем может быть непосредственно нанесен с помощью plt.matshow(). Если вы хотите, чтобы пропущенные значения заполнялись единицами вместо нулей, вы можете использовать m = np.ones() вместо np.zeros(). Если вы не хотите, чтобы минимальное и максимальное значения были установлены на 0.0 и 1.0 соответственно, вы можете просто пропустить vmin=0.0 и vmax=1.0 в вызове на matshow().

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