Python 打印分散文本元素没有自动调整功能

Python 打印分散文本元素没有自动调整功能,python,plotly,Python,Plotly,我正在尝试使用正方形和标签创建热图(我需要用一种特殊的方式自定义它,所以我不能直接使用热图)。然而,有一个问题是,文本被剪切了 有没有办法修复它,使图形自动匹配文本 下面是要复制的代码: import numpy as np import plotly.graph_objects as go # generate value values = np.random.random((5, 10)) # initialize figure fig = go.Figure() # fill fi

我正在尝试使用正方形和标签创建热图(我需要用一种特殊的方式自定义它,所以我不能直接使用热图)。然而,有一个问题是,文本被剪切了

有没有办法修复它,使图形自动匹配文本

下面是要复制的代码:

import numpy as np
import plotly.graph_objects as go

# generate value
values = np.random.random((5, 10))

# initialize figure
fig = go.Figure()

# fill figure
for i, row in enumerate(values):
    max_val = row.max()
    
    # add text for the row
    fig.add_trace(go.Scatter(
        x=[-0.2],
        y=[i + 0.5],
        text=['MY TEXT'],
        mode="text",
        textposition="middle left"
    ))
    
    # add square for each value in a row
    for j, val in enumerate(row):
        fig.add_trace(go.Scatter(
                            x=[j,j,j+1,j+1,j], 
                            y=[i,i+1,i+1,i,i], 
                            fill="toself",
                            mode='lines',
                            fillcolor='blue',
                            line=dict(width=0),
                            opacity=val/max_val
                        ))

# figure layout
fig.update_layout(
    height=400,
    width=600,
    showlegend=False,
)

fig.show()

我认为问题在于,在x轴上,图形增加的增量中没有足够的空间,因此我提出了两种解决方案

解决方案之一就是增加宽度。这可以通过以下方式实现:

import numpy as np
import plotly.graph_objects as go

# generate value
values = np.random.random((5, 10))

# initialize figure
fig = go.Figure()

# fill figure
for i, row in enumerate(values):
    max_val = row.max()
    
    # add text for the row
    fig.add_trace(go.Scatter(
        x=[-0.2],
        y=[i + 0.5],
        text=['MY TEXT'],
        mode="text",
        textposition="middle left"
    ))
    
    # add square for each value in a row
    for j, val in enumerate(row):
        fig.add_trace(go.Scatter(
                            x=[j,j,j+1,j+1,j], 
                            y=[i,i+1,i+1,i,i], 
                            fill="toself",
                            mode='lines',
                            fillcolor='blue',
                            line=dict(width=0),
                            opacity=val/max_val
                        ))

# figure layout
fig.update_layout(
    height=400,
    width=1200,
    showlegend=False,
)

fig.show()
另一个是将cliponaxis设置为false,如下所示:

import numpy as np
import plotly.graph_objects as go

# generate value
values = np.random.random((5, 10))

# initialize figure
fig = go.Figure()

# fill figure
for i, row in enumerate(values):
    max_val = row.max()
    
    # add text for the row
    fig.add_trace(go.Scatter(
        x=[-0.2],
        y=[i + 0.5],
        text=['MY TEXT'],
        cliponaxis=False,
        mode="text",
        textposition="middle left"
    ))
    
    # add square for each value in a row
    for j, val in enumerate(row):
        fig.add_trace(go.Scatter(
                            x=[j,j,j+1,j+1,j], 
                            y=[i,i+1,i+1,i,i], 
                            fill="toself",
                            mode='lines',
                            fillcolor='blue',
                            line=dict(width=0),
                            opacity=val/max_val
                        ))

# figure layout
fig.update_layout(
    height=400,
    width=600,
    showlegend=False,
)

fig.show()

解决方法是使用注释,而不是go.Scatter的mode=“text”

fig.add_annotation(
    x=-0.2, 
    y=i+0.5,
    text='MY TEXT',
    xanchor="right",
    valign="middle",
    showarrow=False
)

谢谢我只是想知道,是否有一个可以自动调整的解决方案,因为我需要一个紧凑的图表,标签可以有不同的长度,边距可以减少。我想另一个可能的解决方案可能是减少文本大小,但我觉得这个解决方案看起来有点奇怪。我不相信有一个解决方案,允许它自动调整,根据我在试图找出一个解决方案时所做的阅读