matplotlib отображает небольшое изображение без повторной выборки

Я пытаюсь построить небольшое изображение в python, используя matplotlib, и хотел бы, чтобы отображаемые оси имели ту же форму, что и массив numpy, из которого он был создан, т. Е. Данные не подлежат повторной выборке. Другими словами, каждая запись в массиве должна соответствовать пикселю (или присутствию) на экране. Это кажется тривиальным, но даже после траления в Интернете на время, я не могу заставить его работать:

import numpy as np import matplotlib.pyplot as plt import matplotlib.cm as cm X = np.random.rand(30,40) fig = plt.figure() fig.add_axes(aspect="equal",extent=[0, X.shape[1], 0, X.shape[0]]) ax = fig.gca() ax.autoscale_view(True, False, False) ax.imshow(X, cmap = cm.gray) plt.show() 

4 Solutions collect form web for “matplotlib отображает небольшое изображение без повторной выборки”

У меня была такая же проблема. Если interpolation='nearest' опция для imshow недостаточно хороша, хорошо, если ваша главная цель – увидеть сырые, немасштабированные, неинтерполированные, не figimage пиксели в matplotlib, тогда вы не сможете победить figimage IMHO , Демо-версия:

 import numpy as np import numpy.random import matplotlib.pyplot as plt a=256*np.random.rand(64,64) f0=plt.figure() plt.imshow(a,cmap=plt.gray()) plt.suptitle("imshow") f1=plt.figure() plt.figimage(a,cmap=plt.gray()) plt.suptitle("figimage") plt.show() 

Конечно, это означает отказ от осей (или как-то их рисование). Есть несколько вариантов figimage которые позволяют перемещать изображение вокруг фигуры, поэтому я предполагаю, что можно было бы маневрировать ими поверх некоторых осей, созданных другими средствами.

Вы можете использовать следующий фрагмент кода для преобразования массива в PIL ( Python Imaging Library ). Полученное изображение будет иметь тот же размер, что и входной массив. Он может отображаться или сохраняться как изображение.

 from PIL import Image from numpy import linspace, array, fromfunction, sin, cos from matplotlib import cm # scale array between vmin and vmax and encode it to uint8 (256 values) def scale(arr, vmin, vmax): return (255*(arr - vmin)/(vmax - vmin)).clip(0, 255).astype('uint8') # convert a matplotlib colormap into a PIL palette def getpalette(cmap): return (255.*array(map(lambda x: cmap(x)[0:3], linspace(0., 1.,256))).ravel()).astype('int') # a sample array data = fromfunction(lambda i,j: cos((i+j)/50)*sin(i/50.), (200, 300), dtype='float') # convert the float array to a PIL image im = Image.fromarray(scale(data, 0, 1)) im.putpalette(getpalette(cm.jet)) im.save('test.png') # or im.show() 

Единственное, что im.show () не очень хорошо, потому что для него требуется просмотрщик изображений xv и он пишет временное изображение. Таким образом, вы можете написать файл и загрузить его с помощью своего любимого средства просмотра изображений.

Я не уверен, что полностью понимаю ваш вопрос. Означает ли это, что вам нужна ось x между 0 и X.shape [1] и ось y между 0 и X.shape [0]? В этом случае этот код должен сделать трюк:

 import numpy as np import matplotlib.pyplot as plt import matplotlib.cm as cm X = np.random.rand(30,40) fig = plt.figure() plt.xlim(0, X.shape[1]) plt.ylim(0, X.shape[0]) ax = fig.gca() ax.autoscale_view(True, False, False) ax.imshow(X, cmap = cm.gray) plt.show() 

Надеюсь, поможет

Если вы знаете собственное разрешение вашего изображения, вы можете установить аргумент dpi в соответствии с тем, что вы хотите в plt.figure(dpi=value) .

Вы можете найти дополнительную информацию об изменении размера изображения по этой ссылке .

  • Как показать метку шейп-файла в легенде базовой карты python?
  • Горизонтальная панель с аннотациями
  • Сюжет Python - многослойные срезы изображений
  • цветной каркасный график в matplotlib
  • Извлечь числовые значения из объекта zfilter в python в библиотеке AudioLazy
  • Представление 4D-данных в mplot 3D с использованием цветовых палитр
  • корректировка осей с помощью imshow
  • Как рисовать таблицу динамического программирования в python
  •  
    Interesting Posts for Van-Lav

    Обновление свойств виджета kivy во время работы кода

    Когда функция в классе возвращает значение, где оно возвращается?

    Я хочу использовать NumPy / SciPy. Должен ли я использовать Python 2 или 3?

    Как создать двунаправленную передачу сообщений с помощью AMP в Twisted / Python

    Не удалось обновить данные в другом файле с помощью python

    Создание новых переменных в цикле с именами из списка в Python

    Нормализовать гистограмму (яркость и контрастность) набора изображений с использованием библиотеки изображений Python (PIL)

    Доступ к элементам в списках в словаре python

    сохраняющая фигуру кусочно-кубическая интерполяция для 3D-кривой в питоне

    Распределение распределения смеси в sympy.stats

    Как конвертировать Selenese (html) в Python программно?

    Что такое тип .iloc ?

    Элемент списка сохраняет тот же адрес памяти после сортировки / копирования

    pypeg2 – может ли это выражение анализироваться с использованием грамматики привязки?

    Расстояние Жаккар – объединение и пересечение списков

    Python - лучший язык программирования в мире.