Bisakah kita memplot data gambar di Altair?


Jawaban:


16

Altair menampilkan tanda gambar yang dapat digunakan jika Anda ingin memplot gambar yang tersedia di URL; sebagai contoh:

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

masukkan deskripsi gambar di sini

Altair tidak cocok untuk menampilkan data array 2 dimensi sebagai gambar, karena tata bahasa utamanya dirancang untuk bekerja dengan data tabel terstruktur. Namun, dimungkinkan untuk menggunakan kombinasi transformasi rata dan transformasi jendela .

Berikut adalah contoh menggunakan data dari halaman yang Anda tautkan ke:

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
)

masukkan deskripsi gambar di sini


@ Jakevdp terima kasih Anda dan buku Anda luar biasa. Bisakah kita mengharapkan fitur baru di altair-viz yang akan memungkinkan kita untuk memvisualisasikan data langsung dari array numpy tanpa harus mengubahnya menjadi panda dataframe atau kita harus bergantung pada matplotlib untuk waktu yang lama?
arjan-hada

Tidak, tata bahasa Altair terkait sangat erat dengan data tabular terstruktur. Saya tidak mengantisipasi data pendukung yang pernah ditetapkan sebagai array multidimensi yang tidak berlabel.
jakevdp
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.