Können wir Bilddaten in Altair zeichnen?

Antworten:

16

Altair verfügt über eine Bildmarke , die verwendet werden kann, wenn Sie Bilder zeichnen möchten, die unter einer URL verfügbar sind. zum Beispiel:

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'
)

Geben Sie hier die Bildbeschreibung ein

Altair eignet sich nicht so gut zum Anzeigen zweidimensionaler Datenfelder als Bilder, da die Grammatik in erster Linie für die Arbeit mit strukturierten Tabellendaten ausgelegt ist. Es ist jedoch möglich, eine Kombination aus Abflachungstransformationen und Fenstertransformationen zu verwenden .

Hier ist ein Beispiel mit den Daten der Seite, auf die Sie verlinkt haben:

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
)

Geben Sie hier die Bildbeschreibung ein

jakevdp
quelle
Vielen Dank, dass Sie @jakevdp. Sie und Ihre Bücher sind unglaublich. Können wir in altair-viz neue Funktionen erwarten, die es uns ermöglichen, Daten direkt aus numpy Arrays zu visualisieren, ohne sie in einen Pandas-Datenrahmen konvertieren zu müssen, oder müssen wir uns lange auf matplotlib verlassen?
Arjan-Hada
Nein, die Grammatik von Altair ist sehr eng mit strukturierten tabellarischen Daten verknüpft. Ich erwarte nicht, jemals Daten zu unterstützen, die als unbeschriftete mehrdimensionale Arrays angegeben sind.
jakevdp