如何在破折号的散点图中显示自定义符号?

How to show custom symbol in scatter plot in dash?

如何在散点图中显示图像中的自定义符号,而不是破折号中提供的以下符号?


这里我们只能在这样的图形中使用有限的符号。

我在 google 上搜索过,但没有找到一个可行的解决方案。我正在做的项目需要这个。

您可以使用 .add_layout_image 方法将您选择的图像叠加在标记上(确保适当调整图像的大小)。这是@RenaudLN 在 Plotly 论坛 post here.

中建议的

这只是一个使用鸢尾花数据集的示例,但我在图像的每个 speciesurl 之间创建了映射。我通过反复试验设置图像的大小(你可以根据自己的喜好调整)。

一件重要的事情是,这些不是连接到痕迹的标记,而是覆盖实际标记的图像,这就是为什么我将标记设为透明的原因,因为显示它们没有意义,因为你想显示自定义图像.我还隐藏了图例,因为当您使用此解决方法时它不会有任何功能——您用来覆盖标记的图像无法在图例中显示,并且切换图例中的条目不会有任何功能对放置在跟踪标记上的图像的影响。

import pandas as pd
import plotly.express as px

df = px.data.iris()
fig = px.scatter(df, x="sepal_width", y="sepal_length", color="species")

## make the markers transparent so they don't show up
## hide the legend because there the markers aren't connected to the traces
fig.update_traces(marker=dict(color='rgba(0,0,0,0)'), showlegend=False)

species_to_image_map = {
    "setosa": "https://upload.wikimedia.org/wikipedia/commons/a/a7/Irissetosa1.jpg",
    "versicolor": "https://upload.wikimedia.org/wikipedia/commons/2/27/Blue_Flag%2C_Ottawa.jpg",
    "virginica": "https://upload.wikimedia.org/wikipedia/commons/thumb/f/f8/Iris_virginica_2.jpg/1920px-Iris_virginica_2.jpg",
}

for x, y, species in df[["sepal_width","sepal_length","species"]].values:
    fig.add_layout_image(
        dict(
            source=species_to_image_map[species],
            xref="x",
            yref="y",
            xanchor="center",
            yanchor="middle",
            x=x,
            y=y,
            sizex=0.10,
            sizey=0.10,
            sizing="contain",
            opacity=1.0,
            layer="above"
        )
    )

fig.show()

对于您在评论中包含的代码,我得到以下结果:

import dash
from dash import html
from dash import dcc
import plotly.graph_objects as go
import plotly.express as px
import plotly.graph_objs as go
import pandas as pd
import numpy as np

app = dash.Dash()   

# num = 30
N = 20
x = np.linspace(0, 1, N)
y=np.random.randn(N)+10

fig = px.scatter( x=x,
                  y=y,
)
fig.data[0].update(mode='markers+lines',
             line = dict(shape = 'linear', color = 'rgb(105, 105, 105)', dash = 'dash'),
             connectgaps = True,)
fig.update_layout(
   margin = dict( l = 0,
                  r=100,
                  t=100,
                  b= 0
               ),
   paper_bgcolor="LightSteelBlue",
)



fig.update_traces(marker=dict(color='rgba(0,0,0,0)'), showlegend=False)
for i in range(N):
   fig.add_layout_image(
      dict(
         source="https://upload.wikimedia.org/wikipedia/commons/8/87/PDF_file_icon.svg",
         x=x[i],
         y=y[i],
         xref="x",
         yref="y",
         xanchor="center",
         yanchor="middle",
         sizex=0.10,
         sizey=0.10,
         sizing="contain",
         opacity=1.0,
         layer="above"
      )
   )
fig.show()
app.run_server()