Peut-on tracer des données d'image dans Altair?

Réponses:

16

Altair propose une marque d'image qui peut être utilisée si vous souhaitez tracer des images disponibles sur une URL; par exemple:

import altair as alt
import pandas as pd

source = pd.DataFrame.from_records([
      {"x": 0.5, "y": 0.5, "img": "https://vega.github.io/vega-datasets/data/ffox.png"},
      {"x": 1.5, "y": 1.5, "img": "https://vega.github.io/vega-datasets/data/gimp.png"},
      {"x": 2.5, "y": 2.5, "img": "https://vega.github.io/vega-datasets/data/7zip.png"}
])

alt.Chart(source).mark_image(
    width=50,
    height=50
).encode(
    x='x',
    y='y',
    url='img'
)

entrez la description de l'image ici

Altair n'est pas aussi bien adapté à l'affichage de tableaux de données bidimensionnels que les images, car la grammaire est principalement conçue pour fonctionner avec des données tabulaires structurées. Cependant, il est possible de le faire en utilisant une combinaison de transformations d'aplatissement et de transformations de fenêtre .

Voici un exemple utilisant les données de la page à laquelle vous avez lié:

import altair as alt
import pandas as pd
from sklearn.datasets import fetch_lfw_people
faces = fetch_lfw_people(min_faces_per_person=60)

data = pd.DataFrame({
    'image': list(faces.images[:12])  # list of 2D arrays
})

alt.Chart(data).transform_window(
    index='count()'           # number each of the images
).transform_flatten(
    ['image']                 # extract rows from each image
).transform_window(
    row='count()',            # number the rows...
    groupby=['index']         # ...within each image
).transform_flatten(
    ['image']                 # extract the values from each row
).transform_window(
    column='count()',         # number the columns...
    groupby=['index', 'row']  # ...within each row & image
).mark_rect().encode(
    alt.X('column:O', axis=None),
    alt.Y('row:O', axis=None),
    alt.Color('image:Q',
        scale=alt.Scale(scheme=alt.SchemeParams('greys', extent=[1, 0])),
        legend=None
    ),
    alt.Facet('index:N', columns=4)
).properties(
    width=100,
    height=120
)

entrez la description de l'image ici

jakevdp
la source
Merci @jakevdp. Vous et vos livres êtes incroyables. Pouvons-nous nous attendre à de nouvelles fonctionnalités dans altair-viz qui nous permettront de visualiser les données directement à partir de tableaux numpy sans avoir à les convertir en trame de données pandas ou allons-nous devoir compter sur matplotlib pendant longtemps?
arjan-hada
Non, la grammaire d'Altair est très étroitement liée aux données tabulaires structurées. Je ne prévois jamais de prendre en charge des données spécifiées comme des tableaux multidimensionnels non étiquetés.
jakevdp