可视化神器Plotly绘制热力图

公众号:尤而小屋
作者: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()

完美解决!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/26818.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pyecharts 画地图(热力图)(世界地图,省市地图,区县地图)

一、概述 在上一篇文章中,链接如下:https://www.cnblogs.com/xiao987334176/p/13791061.html 已经介绍了pyecharts画一些基本图形,接下来介绍画地图 二、世界地图 from pyecharts import options as opts from pyecharts.charts import Map f…

seaborn—sns.heatmap绘制热力图

heatmap(热力图)是识别预测变量与目标变量相关性的方法,同时,也是发现变量间是否存在多重共线性的好方法。 中文文档 seaborn.heatmap(data, vminNone, vmaxNone, cmapNone, centerNone, robustFalse, annotNone, fmt.2g, annot_kwsNone,linewidths0, …

Heatmap 热力图(1)

Heatmap 热力图(1) 显示多个对象,单个属性之间的关系的时候,用柱状图就可以直观的比较;当需要比较多个对象多个属性之间的差异时,需要用热力图。 基于R的heatmaply和plotly交互式热力图 安装:…

Tableau-热力图

Tableau-表格基础上制作热力图 前言1、度量维度制作热力图1.1 拖拽维度到行或者列1.2 拖拽度量1.3 标记度量数据为颜色 2、维度维度制作热力图2.1 拖拽两个维度分别当作行和列2.2 拖拽度量 前言 热力图的制作方便我们进行根据颜色的深浅直接观察,而颜色深浅又是由相…

【热力图】区域地图热力图,百度地图api

最简单的地图热力图&#xff0c;用的是百度的api&#xff0c;所以取经纬度的时候最好也用百度地图。 这里已经填好百度api的key了&#xff0c;但还是建议大家注册使用自己的key&#xff0c;因为有每日额度&#xff0c;超过访问次数了就不可用了。 <script type"text/…

python热力图实现

目录 一、数据无量纲化处理 (热力图) 1.数据无量纲化处理(仅介绍本文用到的方法):min-max归一化 2.代码展示 3.效果展示 二、皮尔斯系数相关(热力图) 1.数学知识 2.代码展示(有不懂的可以私聊) 3.seaborn.heatmap属性介绍 1&#xff09;Seaborn是基于matplotlib的Pyth…

一、python可视化——热力图

热力图 1、利用热力图可以看数据表里多个特征两两的相似度。参考官方API参数及地址&#xff1a; seaborn.heatmap(data, vminNone, vmaxNone,cmapNone, centerNone, robustFalse, annotNone, fmt’.2g’, annot_kwsNone,linewidths0, linecolor’white’, cbarTrue, cbar_kws…

(GIS可视化)热力图

我们经常在百度地图上看到类似这种的热力图&#xff0c;那么这种热力图究竟是什么原理&#xff1f;我们如何应用它来分析实际问题呢&#xff1f; 1.热力图原理 热力图这个名字可能听起来很高大上&#xff0c;但是实际上它等同于我们常说的密度图。 看到上面的图片你可能 会想…

echarts 热力图heatmap

1、配置data热力图主要通过颜色去表现数值的大小,必须要配合visualMap组件使用。可以应用在直角坐标系以及地理坐标系上直角坐标系上必须要使用两个类目轴。当坐标轴为直接坐标轴时,根据x、y轴每项数据相交形成的网格来进行定位,如x:[aa,bb],y:[cc,dd],(0,0)表示第一排第一个da…

热力图可视化 plt cmap

热力图可视化 import matplotlib.pyplot as plt plt.imsave(savename, data, vmin0, vmaxdata_max, cmapturbo)cmap 的其它选择&#xff08;如 magma&#xff0c;jet&#xff09;&#xff1a; 其中cmap"jet"结果类似如下&#xff1a;

热力图 sns.heatmap 调整 图内,坐标轴,color bar 字体大小

原始 首先准备一个文件&#xff0c;我用的是csv文件 我们先看一下最原始的效果&#xff1a; 代码为&#xff1a; student pd.read_csv(./input/small_data.csv) plt.figure(figsize(25, 10)) sns.heatmap(student.corr(), annotTrue, cmapYlGnBu) plt.savefig(relevance.pn…

Origin制图之热力图(hot-map)

软件版本&#xff1a;origin 2022&#xff0c;下载链接在博主的其他文章中查看。 1.首先是数据&#xff0c;第一列为x的标签&#xff0c;可以是数值也可以是本文&#xff0c;本测试用test代替。其余为热力图数据数值。除此以外还需要Y标签或者数值。 2.按如图所示&#xff0c;拷…

热力图heatmap

这个方法又称Class Activation Map(CAM类激活映射)&#xff0c;由于这是基于分类问题的一种可视化技术&#xff0c;并且只有将全连接层改为全局平均池化才能较好的保存图像的空间信息&#xff0c;这对于训练是不利的。2017年提出了Grad-CAM&#xff0c;可以在不改变网络结构的情…

heatmap热力图

heatmap 热力图 热力图在实际中常用于展示一组变量的相关系数矩阵&#xff0c;在展示列联表的数据分布上也有较大的用途&#xff0c;通过热力图我们可以非常直观地感受到数值大小的差异状况。heatmap的API如下所示&#xff1a; 下面将演示这些主要参数的用法&#xff0c;第一件…

即时聊天系统(IM)发送文件语音视频的两种方式比较

一般情况发送消息&#xff0c;把消息通过流发送给接收方{"MessageBody": "消息内容"}&#xff0c;但是作为聊天系统这样发送消息存在两个问题&#xff1a;1&#xff0c;接收方不知道如何解析消息&#xff0c;消息是文本还是图片&#xff0c;语音&#xff0…

用腾讯即时通讯IM和实时音视频实现陪玩系统源码的语音通话功能

在陪玩系统源码中&#xff0c;用户之间主要的交流方式就是语音通话&#xff0c;实时互动性的语音通话能让人产生面对面交谈的感觉&#xff0c;所以在陪玩系统源码中&#xff0c;语音通话功能的开发非常重要&#xff0c;今天我们就一起来看看如何用腾讯即时通讯IM和实时音视频实…

Windows实时视频通话功能实现流程(实时视频系列四)

实时视频通话系列第四篇。上一篇我们介绍了在Windows环境下如何集成即构音视频SDK&#xff0c;回顾《Windows实时视频通话SDK集成指引》&#xff0c;这一篇将介绍视频直播功能实现流程。 还是以 2 人间的实时视频为例&#xff0c;主要流程如下&#xff1a; 请注意&#xff…

第三篇,私有化部署微信的语音电话,视频聊天IM聊天APP开发源码

前面发布两篇文章&#xff0c;有需要的朋友可以回头看一下&#xff0c;希望可以帮到大家的学习和使用。程序采用了uniapp开发&#xff0c;后端采用PHP&#xff0c;数据库采用MySQL的&#xff0c;程序代码开源&#xff0c;可任意二次开发部署等。 计划实现的功能列表 1、发布消…

Windows语音通话SDK集成及功能实现(实时语音通话四)

实时语音通话系列文章四。本篇讲述Windows环境下集成即构科技语音通话SDK&#xff0c;实现语音通话功能流程。 一、SDK集成指引 1、准备环境 请确保开发环境满足以下技术要求&#xff1a; Visual Studio 2013以上版本 Windows7、Windows8、Windows10或以上版本 麦克风、摄像…

微信原生组件|基于小程序实现音视频通话

1 微信小程序原生推拉流组件功能简介 本文将介绍如何使用微信小程序原生推拉流组件 <live-pusher> 和 <live-player> 进行推拉流&#xff0c;快速实现一个简单的实时音视频通话。 由于微信小程序原生推拉流组件使用起来比较复杂&#xff0c;推荐开发者使用即构封…