Wolfram Mathematica中ListDensityPlot缺失边缘点的解决方法问询
如何让Mathematica的ListDensityPlot显示所有网格点(包括边缘)?
问题核心是ListDensityPlot默认的坐标映射逻辑会忽略边缘点对应的色块,而MatrixPlot会为每个矩阵元素生成完整单元格。解决方法是通过DataRange参数明确指定坐标范围,让每个网格点都对应一个独立的彩色方块。
修改后的代码示例
nx = 20; ny = 20; Table[ u[[i]][[j]] = Exp[-(i - nx/2)^2 - (j - ny/2)^2] , {i, 2, nx - 1}, {j, 2, ny - 1}]; Table[u[[i]][[1]] = 1; u[[i]][[ny]] = 1;, {i, nx}]; Table[u[[1]][[j]] = 1; u[[nx]][[j]] = 1;, {j, ny}]; (* 关键是添加DataRange参数,让每个网格点对应完整色块 *) ListDensityPlot[u, InterpolationOrder -> 0, DataRange -> {{0, nx}, {0, ny}}] MatrixPlot[u]
原理说明
MatrixPlot默认将矩阵第i行第j列的元素映射到x∈[i-1, i]、y∈[j-1, j]的矩形区域,因此每个元素都有对应的色块。ListDensityPlot默认的坐标范围是{{1, nx}, {1, ny}},色块仅生成在相邻坐标点之间,导致边缘的第1行/列、第nx/ny行/列元素没有对应的完整色块。- 设置
DataRange -> {{0, nx}, {0, ny}}后,会让每个矩阵元素对应从i-1到i的x区间、j-1到j的y区间,从而让所有20×20的网格点都生成对应的彩色方块,与MatrixPlot效果一致。
内容的提问来源于stack exchange,提问作者Tiago Saraiva
相关产品推荐
相关产品推荐

