plotly Heatmaps 画热度图基本教程

术语“热图”通常是指笛卡尔图,其数据可视化为彩色矩形图块。

Plotly 支持两种不同类型的彩色瓦片热图:

  1. 矩阵热图接受二维矩阵或数据数组并将其直接可视化。这种类型的热图是本页的主题。
  2. 密度热图接受数据作为列表,并可视化聚合数量,如数据的计数或总和。请参阅2D Histogram 文档

 1.使用 Plotly Express 绘制热图

 Plotly Express是 Plotly 的易于使用的高级界面,它对各种类型的数据进行操作并生成易于样式化的图形。使用px.imshow,输入数组或数据帧的每个值都表示为热图像素。

px.imshow()功能用于显示热图(以及全彩图像)。它接受类似数组的对象,如list和numpyxarray数组的列表,以及pandas.DataFrame对象。

话不多说,上代码:

import ​plotly.express as px

fig = px.imshow([[1, 20, 30],
                ​[20, 1, 60],
                ​[30, 60, 1]])
fig.show()

import ​plotly.express as px

df = px.data.medals_wide(indexed=True)
fig = px.imshow(df)
fig.show()

 在热图上显示文本

(v5.5 中的新功能)

可以使用参数将值作为文本添加到图中text_auto。将其设置为True,将在条形图上显示值,并将其设置为d3-format格式化字符串将控制输出格式。

import ​plotly.express as px

z = [[.1, .3, .5, .7, .9],
    ​[1, .8, .6, .4, .2],
    ​[.2, 0, .5, .7, .9],
    ​[.9, .8, .4, .2, 0],
    ​[.3, .4, .5, .7, 1]]

fig = px.imshow(z, text_auto=True)
fig.show()

 控制纵横比

默认情况下,px.imshow()生成带有方形图块的热图,但将aspect参数设置为"auto"将使用非方形图块用热图填充绘图区域。

import ​plotly.express as px

z = [[.1, .3, .5, .7, .9],
    ​[1, .8, .6, .4, .2],
    ​[.2, 0, .5, .7, .9],
    ​[.9, .8, .4, .2, 0],
    ​[.3, .4, .5, .7, 1]]

fig = px.imshow(z, text_auto=True, aspect="auto")
fig.show()

 自定义热图上的轴和标签

可以使用x,ylabels参数自定义热图的显示,并使用.update_xaxes()将 x 轴刻度标签移动到顶部:

import ​plotly.express as px
data=[[1, 25, 30, 50, 1], [20, 1, 60, 80, 30], [30, 60, 1, 5, 20]]
fig = px.imshow(data,
               ​labels=dict(x="Day of Week", y="Time of Day", color="Productivity"),
               ​x=['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'],
               ​y=['Morning', 'Afternoon', 'Evening']
              ​)
fig.update_xaxes(side="top")
fig.show()

基本热图plotly.graph_objects

如果Plotlygo.Heatmapplotly.graph_objects Express 没有提供一个好的起点,也可以使用.

带有分类轴标签的热图

在此示例中,还可以通过将hoverongaps设置为 False来展示如何在数据中有缺失值时忽略hovertext

import ​plotly.graph_objects as go

fig = go.Figure(data=go.Heatmap(
                  ​z=[[1, None, 30, 50, 1], [20, 1, 60, 80, 30], [30, 60, 1, -10, 20]],
                  ​x=['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'],
                  ​y=['Morning', 'Afternoon', 'Evening'],
                  ​hoverongaps = False))
fig.show()

 块大小不等的热图

import plotly.graph_objects as go
import numpy as np

# Build the rectangles as a heatmap
# specify the edges of the heatmap squares
phi = (1 + np.sqrt(5) )/2. # golden ratio
xe = [0, 1, 1+(1/(phi**4)), 1+(1/(phi**3)), phi]
ye = [0, 1/(phi**3), 1/phi**3+1/phi**4, 1/(phi**2), 1]

z = [ [13,3,3,5],
      [13,2,1,5],
      [13,10,11,12],
      [13,8,8,8]
    ]

fig = go.Figure(data=go.Heatmap(
          x = np.sort(xe),
          y = np.sort(ye),
          z = z,
          type = 'heatmap',
          colorscale = 'Viridis'))

# Add spiral line plot

def spiral(th):
    a = 1.120529
    b = 0.306349
    r = a*np.exp(-b*th)
    return (r*np.cos(th), r*np.sin(th))

theta = np.linspace(-np.pi/13,4*np.pi,1000); # angle
(x,y) = spiral(theta)

fig.add_trace(go.Scatter(x= -x+x[0], y= y-y[0],
     line =dict(color='white',width=3)))

axis_template = dict(range = [0,1.6], autorange = False,
             showgrid = False, zeroline = False,
             linecolor = 'black', showticklabels = False,
             ticks = '' )

fig.update_layout(margin = dict(t=200,r=200,b=200,l=200),
    xaxis = axis_template,
    yaxis = axis_template,
    showlegend = False,
    width = 700, height = 700,
    autosize = False )

fig.show()

 带有日期时间轴的热图

import plotly.graph_objects as go
import datetime
import numpy as np
np.random.seed(1)

programmers = ['Alex','Nicole','Sara','Etienne','Chelsea','Jody','Marianne']

base = datetime.datetime.today()
dates = base - np.arange(180) * datetime.timedelta(days=1)
z = np.random.poisson(size=(len(programmers), len(dates)))

fig = go.Figure(data=go.Heatmap(
        z=z,
        x=dates,
        y=programmers,
        colorscale='Viridis'))

fig.update_layout(
    title='GitHub commits per day',
    xaxis_nticks=36)

fig.show()

 热图点上的文本

 可以使用texttemplate向热图点添加文本。将文本属性中的值用于文本。还可使用textfont调整字体大小。

import ​plotly.graph_objects as go

fig = go.Figure(data=go.Heatmap(
                   ​z=[[1, 20, 30],
                     ​[20, 1, 60],
                     ​[30, 60, 1]],
                   ​text=[['one', 'twenty', 'thirty'],
                         ​['twenty', 'one', 'sixty'],
                         ​['thirty', 'sixty', 'one']],
                   ​texttemplate="%{text}",
                   ​textfont={"size":20}))

fig.show()

 更多内容Heatmaps in Pythonicon-default.png?t=M3K6https://plotly.com/python/heatmaps/

猜你喜欢

转载自blog.csdn.net/nature1949/article/details/124416249