关于等值线图的调整
关于等值线图的调整
在画等值线图的时候有几个数值的关系和逻辑还是挺容易弄混的.
1 | # X, Y, Z = x坐标,y坐标,产热 |
这里有三个数的关系需要弄清楚,一个是Z[Z<0] = 1e-1
的1e-6,一个是colors.LogNorm(vmin=1e-2, vmax=Z.max())
的1e-2,一个是plt.contourf
中levels
里的1e-12.
LogNorm
中的vmin
和vmax
指定了数值的映射关系,把vmin
映射到0,把vmax
映射到1,所绘制物理场小于vmin
的值全部映射到0的颜色,大于vmax
的值全部绘制成1的颜色,因此如果把上面的norm_log
改成
1 | norm_log = colors.LogNorm(vmin=1e9, vmax=1e10) |
那么就会画出下面这张产热分布图,小于1e9的产热都映射为jet的最低颜色,大于1e10的产热都被映射为jet的最高颜色. 因为colorbar描述了色彩和数值之间的映射关系,因此colorbar只受norm_log控制,与所绘制的物理量的分布情况无关.
plt.contourf
中的levels
参数传入一个数组,这个数组代表要画的等值线,每两个等值线之间包围的区域用一个色块填充,因此这个levels
数组的要求是至少包括两个元素,而且数组中的元素必须是递增的,因为只有两个等值线才能包出来一块区域。如果把levels
参数设置为[1e-12, 1e12]
,那么等值线图就只围出了一个区域,大于1e12产热的区域没有画出来.
因此在画最上方的HEMT器件里的产热分布时,把负值的几个点都调整为1e-6,而vmin设置为1e-2,此时小于1e-2的产热全部用cmap最低值的颜色来表示,因此负值的几个点全部被掩盖掉了. 在plt.contourf
中的levels的最小值设置为1e-12,levels中下一个数值直接设置到1e6,此时1e-12到1e9之间的范围全部用一个色块表示,因为他们占据总产热的量很小,而且衰减很快,并不需要知道他们的分布,用一个色块掩盖即可.
一些注意事项
- pcolor是像素点绘图,直接映射某个像素点和颜色的关系,因此colorbar是可以画成连续的,而contourf是把两个等值线之间的区域用同一个色块表示,同一个色块并不是相同的数值,因此colorbar必须用离散的.