У меня есть двумерная треугольная сетка с n вершинами, которая хранится в переменной tri
(объект matplotlib.tri.Triangulation); Я могу построить сетку с функцией trcolcolor matplotlib достаточно легко, и все работает нормально. Тем не менее, у меня также есть (r, g, b) тройки для каждой вершины (vcolors
), и эти значения не падают вдоль одного измерения, поэтому их нельзя легко преобразовать в карту цветов (например, представьте, если вы наложили треугольная сетка на большой фотографии парка, а затем назначила каждой вершине цвет пикселя под ним).tripcolor с использованием значений RGB для каждой вершины
Я думал, что я мог бы сделать что-то вроде этого:
matplotlib.pyplot.tripcolor(tri, vcolors)
ValueError: Collections can only map rank 1 arrays
Есть ли удобный способ преобразовать vcolors
-like (п х 3) матрицу в то полезное по tripcolor? Есть ли альтернатива tripcolor, которая принимает цвета вершин?
Одна вещь, которую я пытался это сделать мой собственный Colormap:
z = numpy.asarray(range(len(vcolors)), dtype=np.float)/(len(vcolors) - 1)
cmap = matplotlib.colors.Colormap(vcolors, N=len(vcolors))
matplotlib.pyplot.tripcolor(tri, z, cmap=cmap)
matplotlib.pyplot.show()
Это, однако, не сделал ничего --- не цифра не появляется и не возникает никаких ошибок; функция возвращает дескриптор фигуры, но ничего не получается (я использую ноутбук IPython). Обратите внимание: если я вызываю следующее, график выглядит просто отлично:
tripcolor(tri, np.zeros(len(vcolors)))
matplotlib.pyplot.show()
Я использую Python 2.7.
Я удалил мой ответ, как это явно не помогло. Чтобы предотвратить дальнейшие путаницы: если вы хотите замаскировать гуро, упомяните об этом в вопросе. Поскольку tripcolor не позволяет затушевывать Gouraud в сочетании с аргументом 'facecolors', у вас нет решения вашего вопроса, кроме использования цветовой карты. Если количество разных цветов ограничено, возможным решением может быть создание пользовательской цветовой палитры, например. если вы имеете только 255 различных значений цвета, вы можете создать colormap из этих 255 значений. – ImportanceOfBeingErnest
Gouraud shading - это плюс, но я не требую этого. С затенением или без gouraud ваше утверждение, что аргумент 'facecolors' может решить эту проблему, кажется ложным: для него по-прежнему требуется 1-й z-вектор, который интерпретируется в соответствии с цветовой схемой. Это не помогает мне перейти от тройки RGB за вершину к чему-то полезному. В моем вопросе предлагается альтернатива 'tripcolor', которая может обрабатывать этот случай, поэтому я не согласен с тем, что решение невозможно. Он также явно указывает, что пользовательское решение colormap терпит неудачу, поэтому, если у вас есть обходной путь, я бы хотел его услышать (количество цветов - 'len (vcolors)'). – user16054