电子产业一站式赋能平台

PCB联盟网

帖子
查看: 163|回复: 0
收起左侧

MATLAB|热力直方图|文末送书

[复制链接]

264

主题

264

帖子

1918

积分

三级会员

Rank: 3Rank: 3

积分
1918
发表于 2023-4-20 16:13:00 | 显示全部楼层 |阅读模式
点击上方蓝字和“好玩的MATLAB”一起快乐玩耍吧!
9 W3 R# J* o* V2 A, K
8 ]' y- [+ r5 N3 I) i

rqjbvyrhpeu64018950556.jpg

rqjbvyrhpeu64018950556.jpg
& L2 ]6 H! B/ j8 N
好玩的matlab' {" d$ Q# A3 v4 N/ s- s
带你解锁不一样的matlab新玩法
5 S' |3 x9 ~6 `. M! z: \$ p5 @0 b: z0 l. _; |( b' q9 ^
今天教大家怎么绘制热力直方图,喜欢此推文的小伙伴们记得点赞+关注+分享
: g# @, A1 |8 K, F- S3 {热力直方图是一种结合了热力图和直方图的数据可视化方法,它能够更加全面地展示数据的分布特征和关联性。在某些应用场景中,使用热力直方图优势
  • 直观展示数据密度:热力图部分可以直观地显示数据在二维空间中的分布密度。颜色越暗或越亮表示数据密度越高,这有助于快速识别数据的聚集区域和稀疏区域。
  • 揭示变量间关系:热力直方图可以帮助我们观察两个变量之间的关系。通过分析热力图中颜色的分布和变化,我们可以发现两个变量之间的相关性或者潜在的模式。
  • 边缘分布信息:直方图部分显示了各个变量的边缘分布,这有助于我们了解单个变量的分布特征,例如数据的中心趋势、离散程度以及潜在的异常值。
  • 直观的多维数据展示:热力直方图可以在一个图形中展示多个维度的信息。这使得我们能够更加方便地比较、分析和解释数据。
  • 定制性强:热力直方图可以根据需要定制不同的颜色方案、绘制风格和布局。这使得它能够适应各种场景,满足不同的分析需求。[/ol]效果图$ q: h, K9 j" Q, R4 z0 ?
    ; |: r! {  D0 t* `; `

    hksskzgb3ix64018950656.png

    hksskzgb3ix64018950656.png
    " o5 L) I1 Z# S% [! M, v- _, f

    9 N3 v' C/ w3 q$ H  A

    zstcdz1svsp64018950756.png

    zstcdz1svsp64018950756.png
    : g# r, D+ u- t' j" V1 v
    4 \. X# h; y- }) ]1 E% A: Z: B
    详细教程' X, |1 x2 v  A: i) }; Q2 }. e
    数据设置+ {- E8 H/ \& l. W& C
  • clc;clear;close all;z = [repmat([2 4],1000,1) + randn(1000,2)*[1 .1; 0 1.32];...     repmat([10 1],1000,1) + randn(1000,2)*[1 .5; 0 1.32];...     repmat([6 12],1000,1) + randn(1000,2)*[1 .5; 0 1.32];];x=z(:,1);y=z(:,2);1、默认参数绘图; J9 S7 P$ n+ G8 p$ I
  • figure[mainDataAxes1, xhistAxes1, yhistAxes1] = heatMapHistV(x, y);
    ; S! U% \, M, j7 `4 d5 S

    nmlbhvgo1yo64018950856.png

    nmlbhvgo1yo64018950856.png
    / p9 d. C' }" I- b& v) {
    2、绘制sct属性的散点图,设置直方图的颜色、位置。
    ! W7 @$ i% j8 T
  • figure% 定义x轴直方图的参数:蓝色填充、黑色边缘、透明度为0.8xBarParams2 = {'facecolor', [0, 0, 1], 'edgecolor', 'black', 'FaceAlpha', 0.8};% 定义y轴直方图的参数:红色填充、黑色边缘、透明度为0.8、右边绘制直方图yBarParams2 = {'facecolor', [0.7, 0.1, 0.1], 'edgecolor', 'black', 'FaceAlpha', 0.8, 'right'};% 定义散点图参数:圆形标记、黑色边缘、绿色填充、大小为80、透明度为1plotParams2 = {'Marker', 'o', 'MarkerEdgeColor', 'k', 'MarkerFaceColor', [0.5, 0.9, 0.5], 'SizeData', 80, 'MarkerFaceAlpha', 1};% 设置主标题mainTitle2 = '散点图&直方图';% 调用heatMapHistV函数创建热图、x轴直方图和y轴直方图[mainDataAxes2, xhistAxes2, yhistAxes2] = heatMapHistV(x, y, 30, 30, 'sct', plotParams2, xBarParams2, yBarParams2, mainTitle2);
    & W. m  v7 L5 c5 I* n$ n

    kmjyveg3bon64018950956.png

    kmjyveg3bon64018950956.png
    $ B. X5 f/ w' P1 ~
    3、设置img绘图属性 ,添加标题,设置右侧的颜色条。5 k$ u1 u5 L% u. l3 K# X: W/ K
  • figure% 定义x轴直方图的参数:绿色填充、黑色边缘、透明度为0.5xBarParams3 = {'facecolor', [0, 1, 0], 'edgecolor', 'black', 'FaceAlpha', 0.5};% 定义y轴直方图的参数:红色填充、黑色边缘、透明度为0.5yBarParams3 = {'facecolor', [0.7, 0.1, 0.1], 'edgecolor', 'black', 'FaceAlpha', 0.5};% 设置主标题mainTitle3 = '热力图&直方图';% 调用heatMapHistV函数创建热图、x轴直方图和y轴直方图[mainDataAxes3, xhistAxes3, yhistAxes3] = heatMapHistV(x, y, 35, 30, 'img', {}, xBarParams3, yBarParams3, mainTitle3);% 定义热图的颜色映射cmap = pink(65);% 为热图应用颜色映射colormap(mainDataAxes3, cmap);% 为热图添加颜色条hcb = colorbar(mainDataAxes3);% 设置颜色条的位置和大小set(hcb, 'Location', 'eastoutside', 'Position', [0.73 0.3 0.02 0.4]); % 右侧" m' ^: i8 c- T' b5 z; D

    f3awgyhqfok64018951057.png

    f3awgyhqfok64018951057.png

    7 o3 @# V2 e0 G4、设置srf绘图属性,设置右侧颜色条。* J# c, C. T3 j3 C5 K) O5 b  D: S5 P' A
  • figure% 定义x轴直方图的参数:绿色填充、黑色边缘、透明度为0.5xBarParams4 = {'facecolor', [0, 1, 0], 'edgecolor', 'black', 'FaceAlpha', 0.5};% 定义y轴直方图的参数:橙色填充、黑色边缘、透明度为0.5yBarParams4 = {'facecolor', [0.9, 0.4, 0.1], 'edgecolor', 'black', 'FaceAlpha', 0.5};% 定义绘制热力图的参数:无边缘颜色plotParams4 = {'EdgeColor', 'none'};% 调用heatMapHistV函数创建曲面热图、x轴直方图和y轴直方图[mainDataAxes4, xhistAxes4, yhistAxes4] = heatMapHistV(x, y, 35, 30, 'srf', plotParams4, xBarParams4, yBarParams4);% 定义曲面热图的颜色映射cmap = cool(65);% 为曲面热图应用颜色映射colormap(mainDataAxes4, cmap);% 为曲面热图添加颜色条hcb = colorbar(mainDataAxes4);% 设置颜色条的位置和大小set(hcb, 'Location', 'eastoutside', 'Position', [0.73 0.3 0.02 0.4]);# N! B5 m: f' A! |: P

    bkpvyzhtcqx64018951157.png

    bkpvyzhtcqx64018951157.png
    0 u8 m- k- h" h1 @3 f9 t
    5、设置srfN绘图属性,设置上侧颜色条。. `' f. h% o; ]
  • figure% 定义绘制热力图的参数:无边缘颜色plotParams5 = {'EdgeColor', 'none'};% 设置主标题mainTitle5 = '热力图&直方图';% 调用heatMapHistV函数创建不显示低频值的曲面热图、x轴直方图和y轴直方图[mainDataAxes5, xhistAxes5, yhistAxes5] = heatMapHistV(x, y, 35, 30, 'srfN', plotParams5, xBarParams4, yBarParams4);% 为曲面热图应用颜色映射colormap(mainDataAxes5, cmap);% 为曲面热图添加颜色条hcb = colorbar(mainDataAxes5);% 设置颜色条的位置和大小(上侧)set(hcb, 'Location', 'northoutside', 'Position', [0.30 0.73 0.4 0.04]);, c0 r. E7 ^7 N; J  o9 r) B

    q1drc2tiisw64018951257.png

    q1drc2tiisw64018951257.png

    . R' k3 X, l: K5 O2 O, z6、设置srfN绘图属性,设置左侧颜色条。+ E9 v( Z; L- x( d# h' I
  • figure% 定义x轴直方图参数xBarParams6 = {'facecolor', [0,1,0], 'edgecolor', 'black','FaceAlpha',0.5};% 定义y轴直方图参数yBarParams6 = {'facecolor', [0.9,0.4,0.1], 'edgecolor', 'black','FaceAlpha',0.5,'right'};% 定义热力图参数plotParams6 = {'EdgeColor','none'};% 主标题mainTitle6='热力图&直方图';% 使用heatMapHistV函数绘制热力图和直方图[mainDataAxes6, xhistAxes6, yhistAxes6] = heatMapHistV(x, y, 35, 30, 'srfN',plotParams6,xBarParams6 ,yBarParams6 ,mainTitle6);% 设置热力图的颜色映射cmap = jet(65);colormap(mainDataAxes6, cmap);% 添加颜色条hcb =colorbar(mainDataAxes6);% 设置颜色条位置set(hcb, 'Location', 'eastoutside', 'Position', [0.22 0.3 0.02 0.4]); %左侧
    % z. O, q; b2 J3 ?* `, @2 |# F

    dkgf4krwivg64018951357.png

    dkgf4krwivg64018951357.png

    $ a" ?7 C& i+ K) y6 {0 o7、设置srfNE绘图属性,设置左侧颜色条。
    7 s7 L3 h0 o5 L3 [7 W  T
  • figure% 定义x轴直方图参数xBarParams7 = {'up','facecolor', [0.5,0,0]};% 定义y轴直方图参数yBarParams7 = {'right','facecolor', [0.2,0.5,0.5]};% 定义热力图参数plotParams7 = {'EdgeColor','none'};% 主标题mainTitle7='热力图&直方图';% 使用heatMapHistV函数绘制热力图和直方图[mainDataAxes7, xhistAxes7, yhistAxes7] = heatMapHistV(x, y, 35, 30, 'srfNE',plotParams7,xBarParams7 ,yBarParams7 ,mainTitle7);% 设置热力图的颜色映射cmap = jet(65);colormap(mainDataAxes7, cmap);% 添加颜色条hcb =colorbar(mainDataAxes7);% 设置颜色条位置set(hcb, 'Location', 'eastoutside', 'Position', [0.22 0.3 0.02 0.4]); %右侧% F+ W# p' Q$ \- @

    u4vtgvac5l364018951457.png

    u4vtgvac5l364018951457.png

    0 |3 O) K1 g+ l8、设置sctC绘图属性的散点热力图,添加左侧颜色条。
    1 _* G* L) }! c, Y6 c/ C1 z# M
  • figure% 定义x轴直方图参数xBarParams8 = {'up','facecolor', [0.1,0.1,0.7],'FaceAlpha',0.5};% 定义y轴直方图参数yBarParams8 = {'right','facecolor', [0.1,0.7,0.1],'FaceAlpha',0.5};% 定义热力图参数plotParams8 = {};% 主标题mainTitle8='热力图&直方图';% 使用heatMapHistV函数绘制热力图和直方图[mainDataAxes8, xhistAxes8, yhistAxes8] = heatMapHistV(x, y, 35, 30, 'sctC',plotParams8,xBarParams8 ,yBarParams8 ,mainTitle8);% 设置热力图的颜色映射cmap = jet(65);colormap(mainDataAxes8, cmap);% 添加颜色条hcb =colorbar(mainDataAxes8);% 设置颜色条位置set(hcb, 'Location', 'eastoutside', 'Position', [0.2 0.3 0.02 0.4]); %左侧
    / E  ~1 G6 l( f* \% [' p

    ep01lcpmvkx64018951558.png

    ep01lcpmvkx64018951558.png
    + ^) j+ Y* D6 f5 j
    9、设置ctr绘图属性的等高线图,添加下方颜色条。
    & U% a0 S+ h0 z  {$ e, }; r
  • figure% 定义x轴直方图参数xBarParams9 = {'up','facecolor', [0.7,0.1,0.7],'FaceAlpha',0.5};%定义x轴直方图参数yBarParams9 = {'right','facecolor', [0.1,0.7,0.1],'FaceAlpha',0.5};% 定义热力图参数plotParams9 = {'lineWidth',2};% 主标题mainTitle9='热力图&直方图';% 使用heatMapHistV函数绘制热力图和直方图[mainDataAxes9, xhistAxes9, yhistAxes9] = heatMapHistV(x, y, 35, 30, 'ctr',plotParams9,xBarParams9 ,yBarParams9 ,mainTitle9);% 设置热力图的颜色映射cmap = jet(65);colormap(mainDataAxes9, cmap);% 添加颜色条hcb =colorbar(mainDataAxes9);% 设置颜色条位置set(hcb, 'Location', 'northoutside', 'Position', [0.3 0.2 0.4 0.03]); %下
    7 N# i7 x1 {$ C' [

    odqvgcqkire64018951658.png

    odqvgcqkire64018951658.png

    ! A% K6 u& w$ z% @, f10、设置ctrF绘图属性,填充的等高线图,添加下方颜色条。8 s! P) U6 Z- {! @2 c
  • figure% 定义x轴直方图参数xBarParams10 = {'up','facecolor', [0.7,0.7,0.7],'FaceAlpha',0.5};% 定义y轴直方图参数yBarParams10 = {'left','facecolor', [0.7,0.7,0.1],'FaceAlpha',0.5};% 定义热力图参数plotParams10 = {'lineWidth',1};% 主标题mainTitle10='热力图&直方图';% 使用heatMapHistV函数绘制热力图和直方图[mainDataAxes10, xhistAxes10, yhistAxes10] = heatMapHistV(x, y, 35, 30, 'ctrF',plotParams10,xBarParams10 ,yBarParams10 ,mainTitle10);% 设置热力图的颜色映射cmap = jet(65);colormap(mainDataAxes10, cmap);% 添加颜色条hcb =colorbar(mainDataAxes10);% 设置颜色条位置set(hcb, 'Location', 'northoutside', 'Position', [0.3 0.2 0.4 0.03]); %下
    8 W1 `$ L+ G1 d! S4 t+ m

    g4nfh21agx464018951758.png

    g4nfh21agx464018951758.png
    $ P" ]% G& }7 w+ K) a
    11、设置ctrS绘图属性的散点图+等高线图,添加下方颜色条。
    : x2 d. A4 n9 s3 y: x
  • figure% 定义x轴直方图参数xBarParams11 = {'up','facecolor', [0.7,0.1,0.1],'FaceAlpha',0.5};% 定义y轴直方图参数yBarParams11 = {'left','facecolor', [0.1,0.1,0.8],'FaceAlpha',0.5};% 定义热力图参数plotParams11 = {'lineWidth',2};% 主标题mainTitle11='热力图&直方图';% 使用heatMapHistV函数绘制热力图和直方图[mainDataAxes11, xhistAxes11, yhistAxes11] = heatMapHistV(x, y, 35, 30, 'ctrS',plotParams11,xBarParams11 ,yBarParams11 ,mainTitle11);% 设置热力图的颜色映射cmap = summer(65);colormap(mainDataAxes11, cmap);% 添加颜色条hcb =colorbar(mainDataAxes11);% 设置颜色条位置set(hcb, 'Location', 'northoutside', 'Position', [0.3 0.2 0.4 0.03]); %下6 _1 l1 p1 q: j

    kab0lbjraio64018951858.png

    kab0lbjraio64018951858.png
    4 |9 `3 {3 u7 B: B9 ~# f
    ; x& W1 W! n3 a' p
    12、设置bin绘图属性,分 bin 散点图,添加下方颜色条。
    6 ^  r7 A5 A/ z' s" ^5 h
  • figure% 定义x轴直方图参数xBarParams12 = {'up','facecolor', [0.7,0.1,0.1],'FaceAlpha',0.5};% 定义y轴直方图参数yBarParams12 = {'right','facecolor', [0.1,0.7,0.1],'FaceAlpha',0.5};% 定义热力图参数plotParams12 = {};% 主标题mainTitle12='热力图&直方图';% 使用heatMapHistV函数绘制热力图和直方图[mainDataAxes12, xhistAxes12, yhistAxes12] = heatMapHistV(x, y, 35, 30, 'bin',plotParams12,xBarParams12 ,yBarParams12 ,mainTitle12);% 设置热力图的颜色映射cmap = turbo(65);colormap(mainDataAxes12, cmap);% 添加颜色条hcb =colorbar(mainDataAxes12);% 设置颜色条位置set(hcb, 'Location', 'northoutside', 'Position', [0.3 0.2 0.4 0.03]); %下
    6 S  L5 E! D! |

    cphxfblel1g64018951958.png

    cphxfblel1g64018951958.png
    ) L$ a. h5 b$ B" {2 f
    13、设置bub绘图属性的气泡热力图7 Z! h+ h! V8 W& o4 K2 F- ~
  • figure% 定义x轴直方图参数xBarParams13 = {'up','facecolor', [0.8,0.1,0.1],'FaceAlpha',0.5};% 定义y轴直方图参数yBarParams13 = {'right','facecolor', [0.1,0.1,0.8],'FaceAlpha',0.5};% 定义热力图参数plotParams13 = {};% 主标题mainTitle13='热力图&直方图';% 使用heatMapHistV函数绘制热力图和直方图[mainDataAxes13, xhistAxes13, yhistAxes13] = heatMapHistV(x, y, 30, 30, 'bub',plotParams13,xBarParams13 ,yBarParams13 ,mainTitle13);% 设置热力图的颜色映射cmap = hsv(65);colormap(mainDataAxes13, cmap);% 添加颜色条hcb =colorbar(mainDataAxes13);% 设置颜色条位置set(hcb, 'Location', 'northoutside', 'Position', [0.3 0.2 0.4 0.03]); %下
    6 `1 s  z; _" T7 A1 c

    jxp0nwncgw264018952059.png

    jxp0nwncgw264018952059.png

    1 p) [4 N+ r+ c) z$ U6 r7 _! K6 b: R14、设置mh绘图属性的网格热力图,添加左侧颜色条。
    2 [5 n! e$ V' F* \" g9 l
  • figure% 定义x轴直方图参数xBarParams14 = {'up','facecolor', [0.1,0.7,0.1],'FaceAlpha',0.5};% 定义y轴直方图参数yBarParams14 = {'right','facecolor', [0.7,0.1,0.1],'FaceAlpha',0.5};% 定义热力图参数plotParams14 = {};mainTitle14='热力图&直方图';% 使用heatMapHistV函数绘制热力图和直方图[mainDataAxes14, xhistAxes14, yhistAxes14] = heatMapHistV(x, y, 30, 30, 'mh',plotParams14,xBarParams14 ,yBarParams14 ,mainTitle14);% 设置热力图的颜色映射cmap = hsv(65);colormap(mainDataAxes14, cmap);% 添加颜色条hcb =colorbar(mainDataAxes14);% 设置颜色条位置set(hcb, 'Location', 'eastoutside', 'Position', [0.23 0.3 0.02 0.4]); %左侧6 H) i4 B' M2 _7 D( t" G- {. I9 o5 j- J- d0 q

    e1igpbfpsqe64018952159.png

    e1igpbfpsqe64018952159.png
    ' |, @! B4 _" N- D# G  \; @  g
    15、设置tri绘图属性的三角网格热力图,添加左侧颜色条。
    5 e% r9 C  O; N, _# c; V
  • figure% 定义x轴直方图参数xBarParams15 = {'up','facecolor', [0.1,0.7,0.1],'FaceAlpha',0.5};% 定义y轴直方图参数yBarParams15 = {'right','facecolor', [0.7,0.1,0.1],'FaceAlpha',0.5};% 定义热力图参数plotParams15 = {'EdgeColor','none'};% 主标题mainTitle15='热力图&直方图';% 使用heatMapHistV函数绘制热力图和直方图[mainDataAxes15, xhistAxes15, yhistAxes15] = heatMapHistV(x, y, 30, 30, 'tri',plotParams15,xBarParams15 ,yBarParams15 ,mainTitle15);% 设置热力图的颜色映射cmap = hsv(65);colormap(mainDataAxes15, cmap);% 添加颜色条hcb =colorbar(mainDataAxes15);% 设置颜色条位置set(hcb, 'Location', 'eastoutside', 'Position', [0.23 0.3 0.02 0.4]); %左侧
    * |/ o2 x- I  ~. g* s8 C
    5 W) q" I& M6 ?' l* O% M6 `

    dbguy0iczem64018952259.png

    dbguy0iczem64018952259.png
    4 p0 ?3 _& L% u9 h; ?
    16、设置ctrFS绘图属性的填充等高线+散点图,添加下方颜色条。4 t& N3 W3 g  M
  • figure% 定义x轴直方图参数xBarParams16 = {'up','facecolor', [0.7,0.1,0.1],'FaceAlpha',0.5};% 定义y轴直方图参数yBarParams16 = {'left','facecolor', [0.1,0.1,0.8],'FaceAlpha',0.5};% 定义热力图参数plotParams16 = {'EdgeColor','none'};mainTitle16='热力图&直方图';% 使用heatMapHistV函数绘制热力图和直方图[mainDataAxes16, xhistAxes16, yhistAxes16] = heatMapHistV(x, y, 35, 30, 'ctrFS',plotParams16,xBarParams16 ,yBarParams16 ,mainTitle16);% 设置热力图的颜色映射cmap = summer(65);colormap(mainDataAxes16, cmap);% 添加颜色条hcb =colorbar(mainDataAxes16);% 设置颜色条位置set(hcb, 'Location', 'northoutside', 'Position', [0.3 0.2 0.4 0.03]); %下  J5 G) z4 {9 I! O5 y

    ic3cmmnw2nf64018952359.png

    ic3cmmnw2nf64018952359.png

    2 k, I! S* V( W( }) y' s6 s/ P17、设置坐标位置。. c$ `5 D8 T9 s1 J
  • figurexBarParams17 = {'facecolor', [0.7,0.1,0.1],'FaceAlpha',0.5};yBarParams17 = {'facecolor', [0.1,0.1,0.8],'FaceAlpha',0.5};axesPos= {[0.25 0.25 0.64 0.85], [0.35 0.35 0.35 0.35], [0.35 0.15 0.35 0.2], [0.15 0.35 0.2 0.35]};[mainDataAxes17, xhistAxes17, yhistAxes17] = heatMapHistV(x, y,35, 30,'bub',{},xBarParams17,yBarParams17,{},axesPos);
    ) }' N( _; r3 ?6 e: E& c- o

    uazkbkyvy2i64018952459.png

    uazkbkyvy2i64018952459.png

    ; @: Y. m- |6 d! @: @; Q! c. n; I- I3 B6 d: B& y: h) A) V

    8 i( }9 k- J4 ^+ m工具箱函数代码
    0 x8 Q) C. M3 P4 o$ @3 u
  • function [mainDataAxes, xhistAxes, yhistAxes] = heatMapHistV(x, y, NbinX, NbinY,typeParams,plotParams, xBarParams, yBarParams,mainTitle, axesPos)%  ==============================================================================================%      | @Author : 小猪猪             +%      | @公众号  : 好玩的MATLAB       +%      | @Email  : 2377389590@qq.com +%  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++% heatMapHistV 绘制二维热力图及其在横纵坐标up的一维直方图% heatMapHistV(x, y, NbinX, NbinY, typeParams, xBarParams, yBarParams, mainTitle, axesPositions)% 绘制二维热力图,同时在横纵坐标up分别绘制一维直方图,NbinX和NbinY分别表示x和y的直方图的bin数。% 输入参数:% x          - x轴数据% y          - y轴数据% NbinX      - x轴直方图bin数% NbinY      - y轴直方图bin数% typeParams - 可选,热力图类型,%             'sct'(default值):散点图。在主图up绘制输入数据的散点图。%             'img':图像。在主图up以图像的形式显示二维数据的直方图。%             'srf':表面图。在主图up以三维表面图的形式显示网格点频率。%             'srfN':表面图(无边缘线)。在主图up以三维表面图的形式显示网格点频率,但不显示边缘线。%             'srfNE':表面图(无边缘线、低值隐藏)。在主图up以三维表面图的形式显示网格点频率,但不显示边缘线,且低于阈值的部分设为NaN。%             'sctC':带颜色的散点图。在主图up绘制输入数据的散点图,颜色表示密度。%             'ctr':等高线图。在主图up绘制输入数据的等高线图。%             'ctrF':填充等高线图。在主图up绘制输入数据的填充等高线图。%             'ctrS':带散点的等高线图。在主图up绘制输入数据的等高线图,并显示散点。%             'ctrFS':带散点的填充等高线图。在主图up绘制输入数据的填充等高线图,并显示散点。%             'bin':二维直方图。在主图up显示二维数据的直方图,类似于图像显示,但使用颜色条表示数量。%             'bub':气泡图。在主图up显示气泡图,气泡大小表示密度。%             'pc':伪彩图。在主图up显示伪彩图。%             'mh':网格图。在主图up显示网格图,包括使用TriScatteredInterp方法和griddata方法计算的网格数据。%             'tri':三角剖分图。在主图up显示使用Delaunay三角剖分计算的三维表面图% plotParams - 绘图参数% xBarParams - 可选,x轴直方图可选参数的cell数组,default为 {'facecolor', [.1 .7 .7],% 'edgecolor', [1 1 1],'down'} 其中:可以设置 x轴直方图down:up/down% yBarParams - 可选,y轴直方图可选参数的cell数组,default为 {'facecolor', [.7 .1 .7],% 'edgecolor', [1 1 1],'left'} 其中:可以设置 y轴直方图left:left/right% mainTitle  - 可选,主标题,default为空字符串% axesPos - 可选,1x4 cell数组,包含图形窗口、主坐标轴、x轴直方图坐标轴、y轴直方图坐标轴的位置,%                 default为 {[0.25 0.25 0.64 0.85], [0.35 0.35 0.35 0.35], [0.35 0.1 0.35 0.2], [0.1 0.35 0.2 0.35]}% =============输出参数:==========================================================================================% mainDataAxes - 主热力图的坐标轴句柄% xhistAxes    - x轴直方图的坐标轴句柄% yhistAxes    - y轴直方图的坐标轴句柄% +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    2 E  N$ I- I6 enarginchk(0, 10);if nargin 2    z = [repmat([2 4],1000,1) + randn(1000,2)*[1 .5; 0 1.32];...        repmat([9 1],1000,1) + randn(1000,2)*[1.4 .2; 0 0.98];...        repmat([4 8],1000,1) + randn(1000,2)*[1 .7; 0  0.71];];    x=z(:,1);    y=z(:,2);end) [; \4 g% z7 G- k/ `5 o$ z6 m
    if length(x) ~= length(y)    error('输入参数x和y的长度必须相同');end
    - _3 q% D1 r& |; f& V9 y' D" rif nargin 3    NbinX = 20;end
    & T& o# |- o! Y% eif nargin 4    NbinY = 20;end
    4 j+ W% z7 k' N6 W, s; pif nargin 5    typeParams = 'sct';end
    0 O( s- t: y9 T( B- J( C( fif nargin 6    plotParams = {};end7 [  _* x0 }) t6 p$ l
    if nargin 7    xBarParams = {'facecolor', [.1 .7 .7], 'edgecolor', [1 1 1],'down'};end
    2 z" I/ U) k9 d: _0 s$ X7 xif nargin 8    yBarParams = {'facecolor', [.7 .1 .7], 'edgecolor', [1 1 1],'left'};end. @+ y+ S: U" X  @5 w* Y; |) m& i
    if nargin 9    mainTitle = '';end
    " s) ?, t5 \# y( f% \! c/ cif nargin 10    axesPos ={[0.2500 0.2500 0.5000 0.5000],...% 主图形窗口的位置        [0.3000 0.3000 0.4000 0.4000],... % 主坐标轴(热力图)的位置        [0.3000 0.100 0.4000 0.1500],... % down侧x轴直方图的位置        [0.1000 0.3000 0.1500 0.4000],... % 左侧y轴直方图的位置        };end
    0 n( u. @0 l4 x' t7 C2 JhasYR = any(cellfun(@(x) strcmp(x, 'right'), yBarParams));hasYL = any(cellfun(@(x) strcmp(x, 'left'), yBarParams));hasXU = any(cellfun(@(x) strcmp(x, 'up'), xBarParams));hasXD = any(cellfun(@(x) strcmp(x, 'down'), xBarParams));+ a. L5 b7 }& ]0 Y5 N
    if hasYL&&hasXD    disp(['left,down'])    flagYDir='reverse';    flagXDir='reverse';    axesPositions ={[0.2500 0.2500 0.5000 0.5000],...% 主图形窗口的位置        [0.3000 0.3000 0.4000 0.4000],... % 主坐标轴(热力图)的位置        [0.3000 0.1000 0.4000 0.1500],... % down侧x轴直方图的位置        [0.1000 0.3000 0.1500 0.4000]}; % 左侧y轴直方图的位置
    / f. |# E) f6 T; T- U6 y+ O1 U7 Relseif hasYL&&hasXU    disp(['left,up'])    flagYDir='reverse';    flagXDir='normal';    axesPositions ={[0.2500 0.2500 0.5000 0.5000],...% 主图形窗口的位置        [0.3000 0.3000 0.4000 0.4000],... % 主坐标轴(热力图)的位置        [0.3000 0.7500 0.4000 0.1500],... % up侧x轴直方图的位置        [0.1000 0.3000 0.1500 0.4000]}; % 左侧y轴直方图的位置elseif hasYR&&hasXD    disp(['right,down'])    flagYDir='normal';    flagXDir='reverse';    axesPositions ={[0.2500 0.2500 0.5000 0.5000],...% 主图形窗口的位置        [0.3000 0.3000 0.4000 0.4000],... % 主坐标轴(热力图)的位置        [0.3000 0.1000 0.4000 0.1500],... % down侧x轴直方图的位置        [0.7500 0.3000 0.1500 0.4000]};   % 右侧y轴直方图的位置elseif hasYR&&hasXU    disp(['right,up'])    flagYDir='normal';    flagXDir='normal';    axesPositions ={[0.2500 0.2500 0.5000 0.5000],...% 主图形窗口的位置        [0.3000 0.3000 0.4000 0.4000],... % 主坐标轴(热力图)的位置        [0.3000 0.7500 0.4000 0.1500],... % up侧x轴直方图的位置        [0.7500 0.3000 0.1500 0.4000]};   % 右侧y轴直方图的位置elseif ~hasYR&&hasXU    flagYDir='reverse';    flagXDir='normal';    axesPositions ={[0.2500 0.2500 0.5000 0.5000],...% 主图形窗口的位置        [0.3000 0.3000 0.4000 0.4000],... % 主坐标轴(热力图)的位置        [0.3000 0.7500 0.4000 0.1500],... % up侧x轴直方图的位置        [0.1000 0.3000 0.1500 0.4000]}; % 左侧y轴直方图的位置elseif hasYR&&~hasXD    disp(['right,down'])    flagYDir='normal';    flagXDir='reverse';    axesPositions ={[0.2500 0.2500 0.5000 0.5000],...% 主图形窗口的位置        [0.3000 0.3000 0.4000 0.4000],... % 主坐标轴(热力图)的位置        [0.3000 0.1000 0.4000 0.1500],... % down侧x轴直方图的位置        [0.7500 0.3000 0.1500 0.4000]};   % 右侧y轴直方图的位置
    . e! O0 J* m0 ^6 ]0 belse    disp(['default'])    flagYDir='reverse';    flagXDir='reverse';    axesPositions =axesPos;end0 t/ Z5 I, m* y
    posxIdx = cellfun(@(x) strcmp(x, 'up'), xBarParams);xBarParams(posxIdx) = [];posyIdx = cellfun(@(x) strcmp(x, 'right'), yBarParams);yBarParams(posyIdx) = [];posxIdx = cellfun(@(x) strcmp(x, 'down'), xBarParams);xBarParams(posxIdx) = [];posyIdx = cellfun(@(x) strcmp(x, 'left'), yBarParams);yBarParams(posyIdx) = [];# b; x' u; s7 y: Y
    % 设置图形窗口set(gcf, 'units', 'normalized', 'position', axesPositions{1});
    - l; Q5 Z2 i% y, R! }% 创建x轴直方图坐标轴xhistAxes = axes('position', axesPositions{3});% 绘制x轴直方图[N1, c1] = hist(x, NbinX);bar(xhistAxes, c1, N1, xBarParams{:});xlim(xhistAxes, [min(x) max(x)]);set(xhistAxes, 'ydir', flagXDir, 'xticklabel', {}, 'visible', 'off')line(xhistAxes, get(xhistAxes, 'xlim'), [0 0], 'Color', [0 0 0]);& }# c# _/ c2 R% P! L  |% h
    % 创建y轴直方图坐标轴yhistAxes = axes('position', axesPositions{4});% 绘制y轴直方图[N2, c2] = hist(y, NbinY);barh(yhistAxes, c2, N2, yBarParams{:});ylim(yhistAxes, [min(y) max(y)]);line(yhistAxes, [0 0], get(yhistAxes, 'ylim'), 'Color', [0 0 0]);set(yhistAxes, 'xdir', flagYDir, 'yticklabel', {}, 'visible', 'off');% 创建主坐标轴mainDataAxes = axes('position', axesPositions{2});( H7 W0 ]% [) Z) L
    xedges = linspace(min(x), max(x), NbinX);yedges = linspace(min(y), max(y), NbinY);
    7 v; O$ }& R& Z% t; S[X,Y]=meshgrid(xedges,yedges);% ++++++++此处思路参考公众号:slandarer随笔+++++++++++++++++++++++++++% web('https://mp.weixin.qq.com/s/b3Qt7Gu0Gqbnoa8AeJit6A')[fi,~]=ksdensity([x,y],[X(:),Y(:)]);Z=reshape(fi,[NbinY,NbinX]);Zi=interp2(X,Y,Z,x,y);
    : Y! F) P  V! \" k; \levels=linspace(1e-3,max(max(Zi)),15);% ++++++++++++++++++++++++++++++++++++++++++++++++++++++
    ; y9 {( C  S( p! F. FZgriddata = griddata(x,y,Zi,X,Y);triScatterInterp_F = TriScatteredInterp(x,y,Zi,'natural');%scatteredInterpolantZtriScatterInterp = triScatterInterp_F(X,Y);: P& s2 z# W% J& D  r) J$ U7 o
    % 判断typeParams的类型并绘制相应的图形switch typeParams    case 'sct'        % 绘制散点图        scatter(mainDataAxes, x, y, 'filled', plotParams{:});    case 'img'        % 计算二维直方图        [counts, ~, ~] = histcounts2(x, y, xedges, yedges);        counts = counts';        % 使用 imagesc 绘制图像        imagesc(mainDataAxes, xedges, yedges, counts, plotParams{:});        set(mainDataAxes, 'YDir', 'normal');
    6 y4 ]* ^6 p, N7 K$ \    case 'srf'        % 计算网格点频率        gridEval = computeGridFrequencies(x, y, NbinX, NbinY);        % 绘制3D曲面图        surf(mainDataAxes, (xedges(1:end-1) + xedges(2:end)) / 2, (yedges(1:end-1) + yedges(2:end)) / 2, gridEval, plotParams{:});        shading interp;    case 'srfN'        % 计算网格点频率        gridEval = computeGridFrequencies(x, y, NbinX, NbinY);        gridEval(gridEval         % 绘制3D曲面图(无网格线)        surf(mainDataAxes, (xedges(1:end-1) + xedges(2:end)) / 2, (yedges(1:end-1) + yedges(2:end)) / 2, gridEval, plotParams{:});    case 'srfNE'        % 绘制3D曲面图(仅显示一半高度的曲面)        surf(X, Y, Z, 'EdgeColor', 'none', plotParams{:});    case 'sctC'        % 绘制带颜色的散点图        scatter(mainDataAxes, x, y, 'filled', 'CData', Zi, plotParams{:});    case 'ctr'        % 绘制等高线图        contour(X, Y, Z, levels, plotParams{:});    case 'ctrF'        % 绘制填充的等高线图        contourf(X, Y, Z,levels, plotParams{:});    case 'ctrS'        % 绘制等高线图并叠加散点图        hold on;        contour(X, Y, Z, levels, plotParams{:});        scatter(mainDataAxes, x, y, 'filled', 'CData', Zi, plotParams{:});    case 'ctrFS'        % 绘制填充的等高线图并叠加散点图        hold on;        contourf(X, Y, Z, levels,plotParams{:});        scatter(mainDataAxes, x, y, 3, 'filled', 'MarkerEdgeColor', 'k', 'MarkerFaceColor', 'flat');    case 'bin'        % 绘制二维色块图        binscatter(x, y, [NbinX*3 NbinY*3], plotParams{:});        hcb = colorbar;        delete(hcb);    case 'bub'        Z(Z        % 绘制气泡图        bubblechart(X(:), Y(:), Z(:), Z(:), plotParams{:});        bubblesize([1, 14]);    case 'pc'        % 绘制二维色块图        h = pcolor(X, Y, Zgriddata, plotParams{:});        set(h, 'edgecolor', 'none');    case 'mh'        % 绘制3D网格图        mesh(X, Y, Zgriddata, plotParams{:});        view(2);    case 'tri'        % 计算三角剖分        tri = delaunay(X, Y);        % 绘制三角形曲面图        trisurf(tri, X, Y, ZtriScatterInterp, plotParams{:});    otherwise        % 输出错误信息:没有此类型        disp('没有此类型');        scatter(mainDataAxes, x, y, 'filled', plotParams{:})end
    ; \- P7 T7 \1 d8 m9 I1 v4 f3 [ax = gca; % 获取当前坐标轴句柄grid on;  % 打开网格线box on;   % 显示坐标轴边框ax.Title.String = mainTitle; % 设置坐标轴标题ax.LineWidth = 1;            % 设置坐标轴线宽ax.XMinorTick = 'on';        % 打开x轴次要刻度线ax.YMinorTick = 'on';        % 打开y轴次要刻度线ax.TickDir = 'out';          % 设置刻度线方向向外ax.GridLineStyle = '--';     % 设置网格线样式为虚线ax.FontSize = 14;            % 设置坐标轴字体大小ax.XLim = [min(xedges) max(xedges)]; % 设置x轴坐标范围ax.YLim = [min(yedges) max(yedges)]; % 设置y轴坐标范围view(2); % 设置视图为2D% shading interp;% axis tight;% axis square9 J2 [9 Z  O9 S5 C3 |' _
    % 计算网格点频率的子函数    function gridEval = computeGridFrequencies(x, y, NbinX, NbinY)        xx = linspace(min(x), max(x), NbinX);        yy = linspace(min(y), max(y), NbinY);        gridEval = zeros(length(yy) - 1, length(xx) - 1);        for x_i = 1:length(xx) - 1            for y_i = 1:length(yy) - 1                x_ind = intersect(find(x > xx(x_i)), find(x                 xy_ind = intersect(find(y(x_ind) > yy(y_i)), find(y(x_ind)                 gridEval(y_i, x_i) = length(xy_ind);            end        end    endend
    1 F7 C4 S8 ?2 J/ D$ L- -THE END- -
    % m( G; e' M* H4 |9 J$ ^4 Q, a
    5 `; F! p' c! w9 d( q, p% |源码下载:gitee下载:https://gitee.com/iDMatlab/heat-map-hist-v% @- O2 ?" ]' s) d% t% c

    . G! Q8 r( Q+ d! V$ Q" m$ t2 C" |. d5 q  ^
    9 X1 g4 y( Q: H
    参考资料:  B8 i6 U$ m3 r: q. X
    【1】https://mp.weixin.qq.com/s/b3Qt7Gu0Gqbnoa8AeJit6A【2】https://www.mathworks.com/help/matlab/ref/binscatter.html' v# P% S& V5 {3 H5 q* j4 G
    9 u* D, E6 M6 s3 C, t; N
    . C% h- T) C3 P& [4 A  F

    " S: z. h- J: W( m' G9 X送书活动, \. j4 t2 v; {; q; U) \
    6 i/ [! ?, c% O$ v: j
    包邮赠送清华大学出版社赞助《MATLAB数学建模》共3本,感兴趣的朋友推荐入手一本。
    2 [0 H0 v/ w2 x9 b: w+ ~$ c  h" S9 ~/ z

    3 _0 J) w" z. x6 O3 w% ]! C4 h
    6 `; q7 I! t9 p; Y
    6 @# g: U7 C: y  T! ~/ r' P% w扫码领取领优惠劵
    3 P& n( G* k3 g9 V8 U$ C
    ; x% d! A1 j$ d0 _; q0 X
    9 L' \, Y, `& j& Z$ j8 D7 ]" c7 P1 F6 |4 L* v& Q
    4 @( t2 u) h" Y0 f2 W! {0 \
    2 E9 T& X+ r5 G- ^1 U6 }% w' t

    3 Z9 b- j0 M# E5 w3 a" {9 v6 a6 W* C( B
    活动方式
    + K8 O$ Z  @" n
    3 ?9 W( s+ u* Q6 {2 Z2 E6 x- O0 v1.关注「好玩的MATLAB 」公众号,加微信:idmatlab;9 Q1 j1 }: ^5 @7 J9 y
    2.给本文点【】+【在看】;
    2 l1 X: @! |+ Z  Z7 C) A% C3.转发此推文到朋友圈集赞36个,截图发管理员微信,
    1 `  b7 r: g4 h3 |先到先得!$ u" E2 I+ E; D" p. Z
    只有3本书!% S1 ^5 ]- O7 T) b; x3 d" ~
    后来的没有任何奖品,活动公平公正!公开透明!
    # V6 v/ @$ a! K5 A: }0 Q6 ]- z* ?同时满足上述3个条件的读者朋友,包邮赠送一本。3 q; h5 e) X: ~) ?3 C

      t8 P) z8 y8 |5 m4 n& ?扫一扫加管理员微信发截图
    3 r2 z( W, B5 f' `' Z! Q( G8 ^
    . {4 E- s& L2 [# W
  • 回复

    使用道具 举报

    发表回复

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

    站长推荐


    联系客服 关注微信 下载APP 返回顶部 返回列表