公众号:尤而小屋
作者:Peter
编辑:Peter

大家好,我是Peter~

之前更新了很多关于Plotly绘图的文章。今天带来的文章是基于官网和实际案例来讲解如何绘制不同需求下的热力图。

Plotly中绘制热力图有3种方式:heatmap、imshow和figure_factory(Plotly的图形工厂函数)

官网学习地址:

  • https://plotly.com/python/heatmaps/
  • https://plotly.com/python/imshow/
  • https://plotly.com/python/annotated-heatmap/

目录

本文的整体目录:

Plotly连载文章

几篇Plotly更新的文章,请参考:

导入库

import pandas as pd
import numpy as npimport plotly_express as px
import plotly.graph_objects as go
import plotly.figure_factory as ff  # 图形工厂
from plotly.subplots import make_subplots  # 绘制子图

基于px展示imshow

Plotly中的imshow主要是用来展示图像数据,当然也可以用来显示热力图:

展示RGB图形数据

# 数据部分
rgb = np.array([[[105, 0, 0], [0, 255, 0], [0, 0, 55]],[[0, 250, 0], [0, 0, 205], [255, 0, 0]]], dtype=np.uint8)# 调用px
fig = px.imshow(rgb)
fig.show()

基于嵌套列表

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

基于二维数组的数据

1、显示颜色棒及颜色

data = np.arange(20).reshape(4,5) # 如何使用Numpy生成数据
fig = px.imshow(data)
fig.show()

2、不显示颜色棒+灰色

data = np.arange(20).reshape(4,5)
fig = px.imshow(data,binary_string=True)  # 参数设置
fig.show()

3、显示灰色+颜色棒

data = np.arange(20).reshape(4,5)
fig = px.imshow(data,color_continuous_scale="gray")  # 参数设置
fig.show()

基于图形文件中的数据

1、基础图形

# 从skimage中导入数据
from skimage import data  # 导入指定图像数据
img = data.astronaut()fig = px.imshow(img, binary_format="jpeg", binary_compression_level=0)
fig.show()

2、不显示坐标轴刻度

# 从skimage中导入数据
from skimage import data  # 导入指定图像数据
img = data.astronaut()fig = px.imshow(img, binary_format="jpeg", binary_compression_level=0)# 不显示颜色范围和轴刻度
fig.update_layout(coloraxis_showscale=False)
fig.update_xaxes(showticklabels=False)
fig.update_yaxes(showticklabels=False)fig.show()

自定义轴刻度值

import plotly.express as pxdata=[[1, 25, 30, 50, 100], [20, 10, 60, 80, 30], [13, 60, 31, 5, 20]]fig = px.imshow(data,  # 传入数据# 轴标签设置labels=dict(x="Week", y="Time of Day", color="Productivity"),  # 轴刻度设置x=['星期一', '星期二', '星期三', '星期四', '星期五'],  y=['早', '中', '晚'])# 轴位置调整
fig.update_xaxes(side="top")fig.show()

基于go展示imshow

graph_objects方法支持两种方法来绘制图像绘制:

  • go.Image:仅支持多通道的图像数据
  • go.Heatmap:支持单通道的图像数据

基于go.Image方法

import plotly.graph_objects as go# 2*3*3的列表
rgb = [[[200, 0, 0], [0, 200, 0], [0, 0, 255]],[[0, 255, 0], [0, 0, 205], [255, 0, 0]]]fig = go.Figure(go.Image(z=rgb))fig.show()

基于go.heatMap方法

import plotly.graph_objects as gofig = go.Figure(data=go.Heatmap(z=[[10, 20, 30],[20, 1, 60],[30, 60, 10]]))fig.update_layout(width=800,height=500)fig.show()

缺失值处理

import plotly.graph_objects as gofig = go.Figure(data=go.Heatmap(z=[[1, None, 30, 50, 1], [20, 1, 60, np.nan, 30], [30, 60, 1, -10, 20]],x=['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'],y=['Morning', 'Afternoon', 'Evening'],hoverongaps = False))  # 缺失值处理参数
fig.show()

基于图形工厂 figure_factory

figure_factory图形工厂一个重要的作用就是绘制带有标注的热力图。我们可以看到上面的各种图形都是没有标注的

基础图形

基于图形工长如何绘制基本待标注的基本图形:

import plotly.figure_factory as ffz = [[1.1, .3, .5, .7, .9],[1, .8, .6, .4, .2],[.2, 0, .5, .7, .9],[.9, .8, .4, .2, 0]]fig = ff.create_annotated_heatmap(z)
fig.show()

自定义颜色

import plotly.figure_factory as ffz = [[1.1, .3, .5, .7, .9],[1, .8, .6, .4, .2],[.2, 0, .5, .7, .9],[.9, .8, .4, .2, 0]]# 添加参数:colorscale
fig = ff.create_annotated_heatmap(z,colorscale='Viridis')fig.show()

如何设置不同的颜色:

import plotly.figure_factory as ffz = [[.1, .3, .5, .7],[1.0, .8, .6, .4],[.6, .4, .2, 0.0],[.9, .7, .5, .3]]# 这种写法通过嵌套列表来指定颜色的渐变,更加灵活
colorscale = [[0.0, 'green'],[0.5, 'blue'],[1, 'yellow']]# 指定字体的颜色
font_colors = ['white', 'red']
# 传入字体和颜色参数
fig = ff.create_annotated_heatmap(z, colorscale=colorscale, font_colors=font_colors)
fig.show()

自定义XY轴

import plotly.figure_factory as ff# 显示的数据
z = [[101,131,95],[112,74,146]]# 两个轴,可以任意指定
x = ["语文","数学","英语"]
y = ["小明","小红"]# 待注释的数据,一般和z相同
z_text = [[101,131,95],[112,74,146]]fig = ff.create_annotated_heatmap(z,x=x,y=y,annotation_text=z_text, # 标注文本内容colorscale='Viridis')fig.show()

设置字体大小

有时候我们更改标准文本中字体的大小:

import plotly.figure_factory as ff# 显示的数据
z = [[101,131,95],[112,74,146]]# 两个轴,可以任意指定
x = ["语文","数学","英语"]
y = ["小明","小红"]# 待注释的数据,一般和z相同
z_text = [[101,131,95],[112,74,146]]fig = ff.create_annotated_heatmap(z,x=x,y=y,annotation_text=z_text, # 标注文本内容colorscale='Viridis')# 字体大小设置
for i in range(len(fig.layout.annotations)):fig.layout.annotations[i].font.size=20fig.show()

实战1:相关系数热力图

使用股票数据

采用的plotly_express内置的股票数据;通过相关系数函数corr函数求解出两两公司之间的相关系数

stock = px.data.stocks()
stock.head()

Plotly中内置的一份关于股票的数据:

相关系数

生成相关系数矩阵,同时保留两位小数:

坐标轴和绘图数据

生成坐标轴和待绘图的数据:

绘图

import plotly.figure_factory as ff# 显示的数据
z = data1# 两个轴,可以任意指定
x = index
y = columns
# 显示的文本内容
z_text = data1fig = ff.create_annotated_heatmap(z,  x=x,y=y,annotation_text=z_text, # 标注文本内容colorscale='Viridis',showscale=True
)# 字体大小设置
for i in range(len(fig.layout.annotations)):fig.layout.annotations[i].font.size=12fig.show()

案例2:绘制任意坐标轴热力图

这个案例是自己曾经遇到的一个问题的解决过程,就是当我们的坐标轴中出现了数值和字符串两种类型如何解决。

官网类似案例

两个轴指定的都是字符串类型的数据

import plotly.figure_factory as ffz = [[101,131,95],[112,74,146]]# 重点:都是字符串类型
x = ['Team A', 'Team B', 'Team C']
y = ['Game Two', 'Game One']z_text = [[101,131,95],[112,74,146]]fig = ff.create_annotated_heatmap(z,x=x,y=y,annotation_text=z_text, # 标注文本内容colorscale='Viridis')fig.show()

下面是可以出图的:

改变坐标轴数据

在坐标轴的数据中,同时使用数值和字符串:

这样子就不能出图:问题到底出在哪里呢?

如何解决?介绍两种方法:

方法1:通过参数设置

import plotly.figure_factory as ffz = [[101,131,95],[112,74,146]]# 1、设置坐标轴数据,统一用数据格式
x = list(range(0,3))
y = list(range(0,2))z_text = [[101,131,95],[112,74,146]]fig = ff.create_annotated_heatmap(z,x=x,y=y,annotation_text=z_text, colorscale='Viridis')# 解决方法
# 实际坐标轴
xticks=[1, 'Team B', 'Team C']
yticks=[1, 'Game One']  # 修改坐标轴:将x用xticks来代替,y轴类似
fig.update_xaxes(tickvals=x, ticktext=xticks)
fig.update_yaxes(tickvals=y, ticktext=yticks)
fig.show()

方法2:自定义函数

import plotly.figure_factory as ffz = [[101,131,95],[112,74,146]]x = [1, 'Team B', 'Team C']
y = [1, 'Game One']# 待显示的数据
z_text = z# 关键函数:修改坐标轴
def hm_axis(l):return [f"{chr(0)+str(i)+chr(0)}" for i in l]fig = ff.create_annotated_heatmap(z, x=hm_axis(x), y=hm_axis(y), annotation_text=z_text, colorscale='Viridis')
fig.show()

完美解决!

可视化神器Plotly绘制热力图相关推荐

  1. 再见matplotlib,可视化神器 Plotly 绘制图表的太酷炫了

    数据分析离不开数据可视化.我们最常用的就是pandas,matplotlib,pyecharts 当然还有 Tableau,最近看到一篇文章介绍 plotly 制图后,我感觉写的不够简洁明了. 今天就 ...

  2. 可视化神器Plotly绘制3D图

    公众号:尤而小屋 作者:Peter 编辑:Peter 大家好,我是Peter~ 本文中重点介绍的是如何利用plotly来绘制3D图形. 在3D图形中一般是包含3个轴的:x.y.z.在Plotly中绘图 ...

  3. 可视化神器Plotly绘制树状图

    大家好,我是Peter~ 今天给大家带来的是一篇关于Plotly绘图的文章:如何使用Plotly来绘制矩形树状图 Plotly文章 目前Plotly的文章更新到第17篇,推荐几篇文章: 闲聊 为什么P ...

  4. 可视化神器Plotly玩转多子图绘制

    公众号:尤而小屋 作者:Peter 编辑:Peter 可视化神器Plotly玩转多子图绘制 大家好,我是Peter~ 很长时间没有Plotly绘图的文章,之前已经介绍如何绘制柱状图.饼图.小提琴图.桑 ...

  5. 高级可视化神器Plotly快速入门

    微信公众号:尤而小屋 作者:Peter 编辑:Peter 一文爱上高级可视化神器Plotly 数据可视化已经逐渐发展和深入到我们生活的各个方面,往往遇到数据分析类的工作,借助可视化的方式来呈现我们的数 ...

  6. 酷炫!可视化神器Plotly玩转饼图

    酷炫!可视化神器Plotly玩转饼图 之前发表过两篇关于Plotly的文章: 入门篇:酷炫!36张图爱上高级可视化神器Plotly_Express 散点图:酷炫!可视化神器Plotly玩转散点图 Pl ...

  7. 可视化神器Plotly玩转桑基图

    公众号:尤而小屋 作者:Peter 编辑:Peter 大家好,我是Peter呀~ 本文介绍的是利用Plotly绘制一种相对少见的可视化图形:桑基图,这个图形可以说是展现数据流动的利器. 虽然桑基图使用 ...

  8. Python 可视化神器--Plotly

    文 | 潮汐 来源:Python 技术「ID: pythonall」 学习Python是做数分析的最基础的一步,数据分析离不开数据可视化.Python第三方库中我们最常用的可视化库是 pandas,m ...

  9. 可视化神器Plotly美化表格

    公众号:尤而小屋 作者:Peter 编辑:Peter 可视化神器Plotly美化表格 有时候看到一份表格,没有任何的颜色修饰,总觉得缺点美观效果.在Excel中我们可以直接对字体的颜色.大小等进行设置 ...

最新文章

  1. RocketMQ与kafka对比(18项差异)-转自阿里中间件
  2. fatal error C1083: 无法打开预编译头文件:“Debug\opencv.pch”: No such file or directory
  3. win2000server IIS和tomcat5多站点配置
  4. 前端手动封装数组的foreach,map,filter,every,some,Reduce,reduceRight方法
  5. 【ARM-Linux开发】Wi-Fi 应用工具wpa_supplicant
  6. android aac硬解码,android AAC的音频硬解码
  7. 求序列最长不下降子序列_树状数组解决最长不下降子序列 讲讲主要思路就好...
  8. Oracle 异常处理函数SQLCODE和SQLERRM
  9. python(xlwt的简单运用)
  10. 嵌入式面试—项目篇(二)全国大学生智能汽车竞赛(团队项目)
  11. 图书条形码跟ISBN号互相转换的类
  12. 资源协调与跨部门沟通技巧
  13. labelme为圆环状物体打标签【tips】
  14. ffmpeg 裁剪视频 / 批量
  15. 苏宁易购:前后端分离架构的落地思考
  16. 使用Python套接字编程的视频聊天应用
  17. php循环实现金字塔,PHP中使用循环实现的金字塔图形
  18. 数据库设计:我的租房网
  19. URAL 1671 Anansi's Cobweb (并查集)
  20. 设计模式 - 工厂模式

热门文章

  1. 内核I2C子系统详解
  2. 每日一句:day04——From Zero To Hero
  3. 码农翻身——Redis:MySQL算老几?
  4. lsof Linux
  5. java画板中画直线_java实现画图板上画一条直线
  6. 如何使用闲置的云服务器搭建一个属于自己的私人云网盘(可道云kodbox)
  7. List 列表的用法
  8. 自动驾驶TPM技术杂谈 ———— 超声波雷达系统测距
  9. 闭锁CountDownLatch
  10. 区块链中的记账权问题