Plotly:如何在Plotly地物上打印多个图像?

2024-10-01 22:35:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我的主要目标是在气象图上显示天气图标,使用Dash中的绘图仪。该要求的示例如下所示:

天气图标目标

Capture - Weather Icon Objective

为此,我尝试编写以下代码:

def graph_pictos(df: pd.DataFrame):
    
    k = 0
    
    fig = go.Figure()

    file_path = 'pictos_png/'
       
    for row in df.itertuples():
        
        picto_number = str(round(row.pictonumber_3h))        
        image_filename = ''.join((file_path, picto_number,'_big.png'))
        picto_image = base64.b64encode(open(image_filename, 'rb').read())
   
        
        fig.add_layout_image(
            go.layout.Image(
                source = 'data:image/png;base64,{}'.format(picto_image.decode()),
                xref = "x",
                yref = "y",
                x = k,
                y = 1,
                sizex = 0.5,
                sizey = 0.5,
                xanchor="center",
                yanchor="middle"
            )
        )
        k+=1
        
   
        
        return fig 

我使用一个图标图像文件夹(“pictos_png”),其中每个图像名称对应一个天气代码。然后,数据帧df被传递给函数,其中每一行对应于所考虑的时间戳的天气代码。但是,此函数似乎只显示一个天气图标,对应于数据框df中的最后一个图标代码,如图所示:

Plotly上的图标图像

Capture - icon image on Plotly

有人知道为什么这不能正常工作吗


Tags: path代码图像imagego目标dfpng
1条回答
网友
1楼 · 发布于 2024-10-01 22:35:31

您提供的代码不容易复制。不过,以下设置应该与您要查找的内容非常接近:

Plot

enter image description here

Code

import plotly.graph_objects as go
import plotly.express as px
import pandas as pd

data = {'category': ['A', 'B', 'C', 'D'],
        'x': [4,8,12,16],
        'y':[1,1,1,1],
        'image':["https://images.plot.ly/language-icons/api-home/python-logo.png",
                 "https://raw.githubusercontent.com/michaelbabyn/plot_data/master/benzene.png",
                 "https://images.plot.ly/language-icons/api-home/python-logo.png",
                 "https://raw.githubusercontent.com/michaelbabyn/plot_data/master/benzene.png"],
        'intervals':[[4, 6], [8, 10], [12, 14], [16, 18]]
       }
df = pd.DataFrame(data)

# Create figure
fig = go.Figure()

for i, x in enumerate(df['x']):

    fig.add_layout_image(
            dict(
                source=df['image'].iloc[i],
                xref="x",
                yref="y",
                x=x,
                y=df['y'].iloc[i],
                sizex=2,
                sizey=2,
                sizing="stretch",
                opacity=0.5,
                layer="below")
    )
fig.update_layout(xaxis_range=[0, 20], yaxis_range=[-2,4])

fig.show()

相关问题 更多 >

    热门问题