Как построить тепловую карту неупорядоченного "х" с Plotly в Python? - PullRequest
0 голосов
/ 10 октября 2019

Я пытаюсь построить тепловую карту, используя Plotly с неупорядоченными данными вдоль оси x, например, [0. , 0,5, 1,5, 2., 6., -3., -2., -1., -0.5, 7.8, 8., 3., 4., 4.7, 5.5]. Когда я делаю это, некоторые значения не отображаются. В моем минимальном примере я могу переставить данные вручную, но это невозможно с большими данными, над которыми я работаю.

Я попытался переупорядочить данные вручную, и затем они отображаются правильно, но я не понялспособ исправить эту проблему без переупорядочения вручную.

import numpy as np
import plotly.graph_objects as go

layout = go.Layout(
     title='Something', 
     width=700,
     height=700,
    )

fig = go.Figure(data=go.Heatmap(
               x=[ 0. ,  0.5,  1.5,  2., 6.,  7.5, -3., -2., -1., -0.5, 
    7.8,  8.,  3.,  4.,  4.7, 5.5, 12.5, 13., 14., 14.9,
    9.5, 10., 11., 11.5, 18.8,19.6, 20.5, 21., 15.7, 16.5,17., 18.],
               y=[0,0.5,1],
               z=[[10, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0],
   [1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,0, 0, 0, 0,1, 0, 0, 0,0, 0, 0, 0,1, 0, 0, 0,0, 0, 0, 0],
   [0.1, 0, 0, 0, 0, 0, 0, 0, 0.1, 0, 10, 0, 0, 0, 0, 0, 0.1, 0, 0, 0, 0, 0, 0, 0, 0.1, 0, 0, 0, 0, 0, 0, 0]],
            zauto=False, colorscale='Viridis'),
        layout=layout)

fig

Редактировать: Чтобы решить эту проблему, я использовал сетку numpy и панду DataFrame

import pandas as pd

x=[ 0. , 0.5, 1.5,  2., 6.,  7.5, -3., -2., -1., -0.5,7.8,  8.,  3.,  4.,  4.7, 5.5, 12.5, 13., 14., 14.9, 9.5, 10., 11., 11.5, 18.8,19.6, 20.5, 21., 15.7, 16.5,17., 18.],
y=[0,0.5,1]
z=[[10, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0],
[1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,0, 0, 0, 0,1, 0, 0, 0,0, 0, 0, 0,1, 0, 0, 0,0, 0, 0, 0],
[0.1, 0, 0, 0, 0, 0, 0, 0, 0.1, 0, 10, 0, 0, 0, 0, 0, 0.1, 0, 0, 0, 0, 0, 0, 0, 0.1, 0, 0, 0, 0, 0, 0, 0]]

xx,yy = np.meshgrid(x,y)

source = pd.DataFrame({'x': xx.ravel(),
          'y': yy.ravel(),
          'z': np.array(z).ravel()})

go.Figure(go.Heatmap( 
x = source.x,
y = source.y,
z = source.z,
colorscale='Viridis'))
...