python 在情节的每个子情节上添加文本或十字符号,每个都在子情节的唯一位置

nwlqm0z1  于 2022-12-02  发布在  Python
关注(0)|答案(1)|浏览(116)

我正在努力把一个十字符号在某些位置的每个子情节的情节在Python中。我有2个子情节,在每一个,我想在某些位置的十字如下。
subplot_1和2处的十字符号位置已贴附。

import numpy as np
import plotly.graph_objs as go
import plotly.figure_factory as ff
from plotly.subplots import make_subplots
import string

#Define data for heatmap
N=5
x = np.array([10*k for k in range(N)])
y = np.linspace(0, 2, N) 
z1 = np.random.randint(5,15, (N,N))
z2 = np.random.randint(10,27, (N,N))
mytext = np.array(list(string.ascii_uppercase))[:25].reshape(N,N)

fig1 = ff.create_annotated_heatmap(z1, x.tolist(), y.tolist(),  colorscale='matter')
fig2 = ff.create_annotated_heatmap(z2, x.tolist(), y.tolist(), annotation_text=mytext, colorscale='Viridis')

fig = make_subplots(
    rows=1, cols=2,
    horizontal_spacing=0.05,

)

fig.add_trace(fig1.data[0], 1, 1)
fig.add_trace(fig2.data[0], 1, 2)

annot1 = list(fig1.layout.annotations)
annot2 = list(fig2.layout.annotations)
for k  in range(len(annot2)):
    annot2[k]['xref'] = 'x2'
    annot2[k]['yref'] = 'y2'
fig.update_layout(annotations=annot1+annot2)
jjhzyzn0

jjhzyzn01#

处理这个问题有两种方法:第一个是使用散点图的线条模式,第二个是添加形状。在散点图的线条模式中,真实的的起始位置是-0.5,因此热图和交叉线没有对齐。所以我选择添加一个图形。另外,我现在可以在不使用figure_factory的情况下进行注解,因此我将使用一个graph对象来构造图表。配置是一个热图与两个形状的组合,其中y轴和x轴的比例发生了变化。

import numpy as np
import plotly.graph_objs as go
from plotly.subplots import make_subplots
np.random.seed(1)

fig = make_subplots(rows=1,
                    cols=2,
                    horizontal_spacing=0.05,
)

fig.add_trace(go.Heatmap(z=z1,
                         text=z1,
                         texttemplate='%{text}',
                         showscale=False,
                         ),
              row=1,col=1
             )

fig.add_shape(type='line',
              x0=1.5, y0=1.5, x1=2.5, y1=2.5,
              line=dict(color='black', width=2)
             )
fig.add_shape(type='line',
              x0=2.5, y0=1.5, x1=1.5, y1=2.5,
              line=dict(color='black', width=2)
             )

fig.add_trace(go.Heatmap(z=z2,
                         text=mytext,
                         texttemplate='%{text}',
                         showscale=False,
                         colorscale = 'Viridis'
                         ),
              row=1,col=2
             )
fig.add_shape(type='line',
              x0=0.5, y0=-0.5, x1=1.5, y1=0.5,
              line=dict(color='black', width=2),
              row=1,col=2
             )
fig.add_shape(type='line',
              x0=1.5, y0=-0.5, x1=0.5, y1=0.5,
              line=dict(color='black', width=2),
              row=1, col=2
             )


fig.update_yaxes(tickvals=[0,1,2,3,4], ticktext=y.tolist())
fig.update_xaxes(tickvals=[0,1,2,3,4], ticktext=x.tolist())

fig.update_layout(autosize=False, width=800)
fig.show()

相关问题