2017-01-25 6 views
0

Пусть следующий макет pandas.DataFrame:Отображение сетки JPG изображений в Python

import pandas as pd 

Cat=pd.DataFrame(({'RA' :[230.82102945, 173.65985309999999, 173.66313018, 
          173.84698746999999, 189.96874310999999, 
          170.20006370999999, 170.20416528000001, 
          170.16438034000001, 170.24896294000001, 
          189.84348857000001, 212.74040604000001, 
          212.68784378000001, 154.36278941, 
          154.40930130000001, 154.41919107000001], 
        'Dec': [-1.0481932199999999, 0.18865839000000001, 0.1247615, 
          0.090550759999999994, 0.12548559000000001, 
          0.46857110000000002, 0.45924195000000001, 
          0.45747362000000003, 0.53422636000000001, 0.46023247, 
          1.03574006, 1.04634373, -0.49560479000000002, 
          -0.45308465999999997, -0.48165697000000002], 
        'Morph':['Ei', 'Er', 'Sc', 'Er', 'Sb', 'Ser', 'Er', 'Ser', 
         'Sc', 'Ec', 'Sb', 'Sb', 'Ser', 'Ei(o)', 'Ei(o)']})) 

Я хочу, чтобы отобразить сетку изображений из Интернета в записной книжке Jupyter. Этими изображениями являются галактики из SDSS, координаты которых находятся в моем DataFrame. Это jpg. Мне не нужно хранить их на диске, но это единственный способ, который я нашел. Я только в состоянии отображать их в колонке, и я использую печати для подписи, таким образом:

import urllib 
from IPython.display import Image 
from IPython.display import display 
from astropy import units as u 


impix = 10 
imsize = 0.1*u.arcmin 
cutoutbaseurl = 'http://skyservice.pha.jhu.edu/DR12/ImgCutout/getjpeg.aspx' 

for i in range(16): 
    query_string = urllib.urlencode(dict(ra=Cat.iloc[i]['RA'], 
             dec=Cat.iloc[i]['Dec'], 
             width=impix, height=impix, 
             scale=imsize.to(u.arcsec).value/impix)) 
    url = cutoutbaseurl + '?' + query_string 
    urllib.urlretrieve(url, '%i.jpg'%i) 
    print Cat.iloc[i]['Morph'] 
    x = Image(filename='%i.jpg'%i, height=20*impix, width=20*impix)) 
    display(x) 

Это производит следующий вывод:

enter image description here

enter image description here

Я хотел бы показать это на сетке 4x4 (с метками). Я попытался вставить что-то вроде plt.subplot(441+i) перед отображением, но это не сработает. Более того, если можно не хранить изображения на диске, это было бы прекрасно.

спасибо.

+0

Относительно файла на диске, то я пробовал 'Ио импортировать BytesIO my_url = urllib.urlopen (URL) х = Image (BytesIO (my_url.read()), высота = 20 * impix , width = 20 * impix) дисплей (x) ', но он не работает. – Matt

+0

К сожалению, ваш пример не запускается. 'u' не определено. Отправьте пример фактического запуска. Также кажется, что вы пытаетесь использовать Python 2.x вместо 3.x - это требование или просто то, что у вас есть? –

+0

Извините, я забыл 'от единиц импорта атрофии как u'. Это отредактировано. Я довольно новичок, я использую 3.x, потому что он казался более «стабильным», чем 2,7, мои Jupyter, конфиги, модули модулей ..., я полагаю, соответственно. Если это можно решить в 2.7, это здорово, иначе я могу подумать о переключении своего кода (я немного потерял эту вещь с двумя версиями). – Matt

ответ

1

Итак, я, наконец, разобрался. Я возвращаюсь, чтобы опубликовать свой код.

def getgal(x,i): 
    query_string = urllib.urlencode(dict(ra=x['RA'], 
             dec=x['Dec'], 
             width=impix, height=impix, 
             scale=imsize.to(u.arcsec).value/impix)) 
    return cutoutbaseurl + '?' + query_string 

def url_to_image(url): 
    resp = urllib.urlopen(url) 
    image = np.asarray(bytearray(resp.read()), dtype="uint8") 
    image = cv2.imdecode(image, cv2.IMREAD_COLOR) 
    return image 

def galshow(size,width,height,start): 
    fig = plt.figure(figsize=(size,size)) 
    for i in range(0,width*height): 
     j = i+start 
     url = getgal(Yang.iloc[j],j) 
     img = url_to_image(url) 
     plt.subplot(height,width,i+1) 
     SpecObjID, RA, Dec = Yang.iloc[j]['SpecObjID'],Yang.iloc[j]['RA'],Yang.iloc[j]['Dec'] 
     label = "%i\nRA %f, Dec %f\n%s"%(SpecObjID, RA, Dec,Yang.iloc[j]['Morph']) 
     plt.title(label)  
     plt.xticks([]), plt.yticks([]) 
     plt.tight_layout() 
     plt.imshow(img) 
    plt.show() 

 Смежные вопросы

  • Нет связанных вопросов^_^