如何在 plotly 散点图中添加图像而不是点 (python)

How to add images instead of dots in a plotly scatter plot (python)

假设我在 plotly 中有这个散点图:

import plotly.express as px
fig = px.scatter(x=[0, 1, 2, 3, 4], y=[0, 1, 4, 9, 16])
fig.show()

但是我想在这些特定位置上添加不同的图像而不是点。像这样:

plotly 可以吗?我知道你可以 add Images 但我不知道如何传递图像显示位置的确切坐标。

感谢您的宝贵时间!谢谢。

  • 关于回答的几点
    • 没有提供图像参考,所以从 kaggle 下载了一些。找不到表情符号。这会增加执行此操作的代码...
    • Plotly Express 在没有相关数据框的情况下使用。所以一直坚持这一点。这意味着循环遍历跟踪中的 x&y 值以获得图像的位置
    • 使用的有效图像是随机的,可以根据数据的特征进行选择

import plotly.express as px
import kaggle.cli
import sys, requests
from pathlib import Path
from zipfile import ZipFile
import urllib
from PIL import Image

# fmt: off
# download some images to demonstrate
url = "https://www.kaggle.com/anzhemeng/nfl-team-logos"
sys.argv = [sys.argv[0]] + f"datasets download {urllib.parse.urlparse(url).path[1:]}".split(" ")
kaggle.cli.main()
zfile = ZipFile(f'{urllib.parse.urlparse(url).path.split("/")[-1]}.zip')
# fmt: on
zfile.extractall("nfl-logos")

fig = px.scatter(x=[0, 1, 2, 3, 4], y=[0, 1, 4, 9, 16])

# question did not use a dataframe,  so will use x & y from the figure trace
# just a selection of images, used NFL images given don't have emojis
for x,y, png in zip(fig.data[0].x, fig.data[0].y, Path.cwd().joinpath("nfl-logos").glob("*.png")):
    fig.add_layout_image(
        x=x,
        y=y,
        source=Image.open(png),
        xref="x",
        yref="y",
        sizex=2,
        sizey=2,
        xanchor="center",
        yanchor="middle",
    )
    
fig