【问题标题】:Plotly replace x label with image用图像替换 x 标签
【发布时间】:2021-10-22 17:07:14
【问题描述】:

我有一个 plotly 图表,我想替换 x 标签。

我粘贴了这张图作为示例。在底部您会看到 ARI、ATL、BAL 等。我想知道是否可以用图像替换这些?图标?

【问题讨论】:

  • 图像可以作为注释添加到散点图,但我不知道 x 轴上有任何图像示例。请参阅我在回答类似问题时给出的answer。你是同一个人吗?您已经看到了相同的图表。

标签: python plotly


【解决方案1】:
  • @r-begginers 在参考答案中提供的方法相同
  • 所有徽标均来自 kaggle。使用 PIL 进行编码
  • 已通过创建具有 -ve 百分比的第二条轨迹合成为轴,并使用该绘图区域放置徽标
  • 已将 xaxis 设置为不可见,因此悬停提供团队缩写

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

# fmt: off
# download data set
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")
df = pd.DataFrame(Path.cwd().joinpath("nfl-logos").glob("*.png"), columns=["filename"])
df["team"] = df["filename"].apply(lambda d: d.stem)
df["passResult"] = np.random.uniform(0, 1, len(df))
df = df.sort_values("team")

fig = px.scatter(df, x="team", y="passResult").add_traces(
    px.scatter(df, "team", np.full(len(df), -0.05))
    .update_traces(marker_color="rgba(0,0,0,0)", hovertemplate="%{x}")
    .data
)

for x in fig.data[0].x:
    fig.add_layout_image(
        source=Image.open(df.loc[df["team"].eq(x), "filename"].values[0]),
        x=x,
        y=-0.01,
        xref="x",
        yref="y",
        xanchor="center",
        sizex=1,
        sizey=1,
    )

fig.update_layout(xaxis={"visible":False})

【讨论】:

  • 我明白了,有这样的做法。投票!
  • @Rob Raymond,有没有办法将刻度放在情节下方而不是内部?当我用更大的图像尝试这个时,Y 轴跨越到底片。
  • 另一个选项是使用第二个 y 轴作为刻度并设置两个 y 轴的域
猜你喜欢
  • 2021-04-02
  • 2017-06-28
  • 1970-01-01
  • 1970-01-01
  • 2017-09-16
  • 2012-04-24
  • 1970-01-01
  • 2012-08-21
  • 1970-01-01
相关资源
最近更新 更多