Chúng ta có thể vẽ dữ liệu hình ảnh trong Altair không?


Câu trả lời:


16

Altair có dấu hình ảnh có thể được sử dụng nếu bạn muốn vẽ hình ảnh có sẵn tại một URL; ví dụ:

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

nhập mô tả hình ảnh ở đây

Altair không phù hợp lắm để hiển thị mảng dữ liệu 2 chiều dưới dạng hình ảnh, vì ngữ pháp được thiết kế chủ yếu để làm việc với dữ liệu dạng bảng có cấu trúc. Tuy nhiên, có thể thực hiện bằng cách sử dụng kết hợp các biến đổi flattenbiến đổi cửa sổ .

Dưới đây là một ví dụ sử dụng dữ liệu từ trang bạn liên kết đến:

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
)

nhập mô tả hình ảnh ở đây


Cảm ơn bạn @jakevdp. Bạn và sách của bạn là tuyệt vời. Chúng ta có thể mong đợi các tính năng mới trong altair-viz sẽ cho phép chúng ta trực quan hóa dữ liệu từ các mảng numpy mà không phải chuyển đổi nó thành dataframe hay chúng ta sẽ phải dựa vào matplotlib trong một thời gian dài?
arjan-hada

Không, ngữ pháp của Altair được liên kết rất chặt chẽ với dữ liệu dạng bảng, có cấu trúc. Tôi không dự đoán bao giờ dữ liệu hỗ trợ được chỉ định là mảng đa chiều không được gắn nhãn.
jakevdp
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.