2015-05-30 5 views
0

Я пытаюсь построить изображение с наложенной кривой, но на данный момент я просто приведу пример изображения.проблемы с цветовой гаммой PyPlot с изображениями

Я следил за этим примером (http://matplotlib.org/examples/pylab_examples/colorbar_tick_labelling_demo.html), но когда я пытаюсь заменить гауссовский шум изображением, цветные метки не отображаются корректно (т. Е. Все они разбиты в левом конце).

import matplotlib.pyplot as plt 
from PIL import Image 
import numpy as np 
from matplotlib import cm 
from numpy.random import randn 

fig, ax = plt.subplots() 

data = np.clip(randn(250, 250), -1, 1) 
#data = Image.open('testTop.tif') 

cax = ax.imshow(data, interpolation='nearest', cmap=cm.afmhot) 
ax.set_title('colorBar fun') 

cbar = fig.colorbar(cax, ticks=[-1, 0, 1], orientation='horizontal') 
cbar.ax.set_xticklabels(['Low', 'Medium', 'High'])# horizontal colorbar 

plt.show() 

correct colorbar

#data = np.clip(randn(250, 250), -1, 1) 
data = Image.open('testTop.tif') 

incorrect colorbar

Есть ли что-то внутренняя об отображении изображений, перекосы в Colorbar, или есть еще что-то очевидно, что я не хватает?

ответ

2

Опорная ось цветной полосы в примере с случайным носом идет только от -1 до 1, поскольку данные варьируются от -1 до 1. Изображение tif, используемое вами, возможно, имеет другой диапазон значений. Вы можете получить минимальные и максимальные значения данных, которые вы рисуете, и использовать их для установки тиков цветовой полосы. Вот пример, который будет работать как с случайными данными и изображением:

import matplotlib.cbook as cbook 
import matplotlib.pyplot as plt 
from PIL import Image 
import numpy as np 
from matplotlib import cm 
from numpy.random import randn 

# Load sample image 
image_file = cbook.get_sample_data('grace_hopper.png') 
data = plt.imread(image_file) 
data = data[:,:,0] # Take only one channel for a grey scale image. 

#data = np.clip(randn(250, 250), -1, 1) 

fig, ax = plt.subplots() 

cax = ax.imshow(data, interpolation='nearest', cmap=cm.afmhot) 
ax.set_title('colorBar fun') 

dataMin = np.amin(data) 
dataMax = np.amax(data) 
mid = ((dataMax - dataMin)/2) + dataMin 
cbar = fig.colorbar(cax, ticks=[dataMin, mid, dataMax], orientation='horizontal') 
cbar.ax.set_xticklabels(['Low', 'Medium', 'High'])# horizontal colorbar 

plt.show() 

image with color bar with ticks

+0

Спасибо, что был очень хороший ответ. Что такое преимущество использования 'image_file = cbook.get_sample_data ('grace_hopper.png')' ' данных = plt.imread (image_file)' вместо использования: 'данных = Image.open ('testTop. tif ') '? Если я правильно понимаю, 'imageFile = cbook.get_sample_data ('string')' возвращает путь к файлу, а 'plt.imread (imageFile)' открывает этот путь к файлу, но когда я пытаюсь его использовать, я получаю следующую ошибку: 'FileNotFoundError: [Errno 2] Нет такого файла или каталога: '/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/matplotlib/mpl-data/sample_data/testTop.tif '' – Zswide

+0

Нет никакого преимущества, и вы не должны использовать его с вашими данными. Это всего лишь способ загрузить образец изображения, который, как я думал, был установлен с Matplotlib, но, видимо, у вас его нет. Этот образ и get_sample_data являются частью [cbook] (http://matplotlib.org/api/cbook_api.html) и отображаются в некоторых из Matplotlib [примеров] (http://matplotlib.org/examples/images_contours_and_fields/image_demo_clip_path .html). Извините за путаницу. – Molly

+0

ах, я вижу, он работает с ''grace_hopper.png'', но не с моими собственными данными (что приводит к моей путанице), спасибо за разъяснение. – Zswide