图表:热图
热图快速启动
热图使用彩色贴图显示二维阵列。
var plt = new ScottPlot.Plot(600, 400);
double[,] data2D = { { 1, 2, 3 },
{ 4, 5, 6 } };
plt.SaveFig("heatmap_quickstart.png");
热图的边缘很窄
如果边距设置为零且方形轴锁定被禁用,则热图可以精确拟合绘图区域。
var plt = new ScottPlot.Plot(600, 400);
double[,] data2D = { { 1, 2, 3 },
{ 4, 5, 6 } };
plt.AddHeatmap(data2D, lockScales: false);
plt.Margins(0, 0);
plt.SaveFig("heatmap_margins.png");
带色条的热图
使用热图时,通常会添加色条。
var plt = new ScottPlot.Plot(600, 400);
double[,] data2D = { { 1, 2, 3 },
{ 4, 5, 6 } };
var hm = plt.AddHeatmap(data2D, lockScales: false);
var cb = plt.AddColorbar(hm);
plt.Margins(0, 0);
plt.SaveFig("heatmap_colorbar.png");
平滑热图
默认情况下,热图将值显示为带有锐边的矩形。启用平滑功能使用双三次插值将热图显示为值之间的平滑渐变。
var plt = new ScottPlot.Plot(600, 400);
var rand = new Random(0);
double[,] data2D = DataGen.Random2D(rand, 5, 4);
var hm = plt.AddHeatmap(data2D, lockScales: false);
hm.Smooth = true;
plt.SaveFig("heatmap_smooth.png");
热图图像
可以使用热图打印类型打印图像数据。
var plt = new ScottPlot.Plot(600, 400);
double[,] imageData = DataGen.SampleImageData();
plt.AddHeatmap(imageData);
plt.SaveFig("heatmap_image.png");
二维波形
这个例子展示了一个有1000块瓷砖的热图
var plt = new ScottPlot.Plot(600, 400);
int width = 100;
int height = 100;
double[,] intensities = new double[width, height];
for (int x = 0; x < width; x++)
for (int y = 0; y < height; y++)
intensities[x, y] = (Math.Sin(x * .2) + Math.Cos(y * .2)) * 100;
var hm = plt.AddHeatmap(intensities);
var cb = plt.AddColorbar(hm);
plt.SaveFig("heatmap_2dWaveform.png");
色图
Viridis是默认的颜色映射,但有几种可选颜色。
var plt = new ScottPlot.Plot(600, 400);
double[,] intensities = new double[100, 100];
for (int x = 0; x < 100; x++)
for (int y = 0; y < 100; y++)
intensities[x, y] = (Math.Sin(x * .2) + Math.Cos(y * .2)) * 100;
var hm = plt.AddHeatmap(intensities, Drawing.Colormap.Turbo);
var cb = plt.AddColorbar(hm);
plt.SaveFig("heatmap_colormap.png");
样式化彩色地图
Viridis是默认的颜色映射,但有几种可选颜色。
var plt = new ScottPlot.Plot(600, 400);
double[,] intensities = new double[100, 100];
for (int x = 0; x < 100; x++)
for (int y = 0; y < 100; y++)
intensities[x, y] = (Math.Sin(x * .2) + Math.Cos(y * .2)) * 100;
var hm = plt.AddHeatmap(intensities, Drawing.Colormap.Turbo);
var cb = plt.AddColorbar(hm);
plt.Style(Style.Black);
plt.SaveFig("styled_heatmap_colormap.png");
规模限制
热图颜色贴图比例可以使用定义的最小/最大值。
var plt = new ScottPlot.Plot(600, 400);
double[,] intensities = new double[100, 100];
for (int x = 0; x < 100; x++)
for (int y = 0; y < 100; y++)
intensities[x, y] = (Math.Sin(x * .2) + Math.Cos(y * .2)) * 100;
// scale the colors between 0 and 200
var hm = plt.AddHeatmap(intensities);
hm.Update(intensities, min: 0, max: 200);
// add a colorbar with custom ticks
var cb = plt.AddColorbar(hm);
double[] tickPositions = ScottPlot.DataGen.Range(0, 200, 25, true);
string[] tickLabels = tickPositions.Select(x => x.ToString()).ToArray();
cb.SetTicks(tickPositions, tickLabels, min: 0, max: 200);
plt.SaveFig("heatmap_limitScale.png");
剪彩
colormap显示的值范围可以限制为完整数据范围的一个狭窄子集。颜色栏边缘的勾号标签可以显示不平等符号,以指示在将值转换为颜色时剪裁的数据范围。
var plt = new ScottPlot.Plot(600, 400);
double[,] imageData = DataGen.SampleImageData();
var heatmap = plt.AddHeatmap(imageData);
heatmap.Update(imageData, min: 75, max: 125);
var cb = plt.AddColorbar(heatmap);
// configure the colorbar to display inequality operators at the edges
cb.MaxIsClipped = true;
cb.MinIsClipped = true;
plt.SaveFig("heatmap_clip.png");
密度插值
可以使用固定大小的平方内的计数从随机2D数据点创建热图。
var plt = new ScottPlot.Plot(600, 400);
Random rand = new Random(0);
int[] xs = DataGen.RandomNormal(rand, 10000, 25, 10).Select(x => (int)x).ToArray();
int[] ys = DataGen.RandomNormal(rand, 10000, 25, 10).Select(y => (int)y).ToArray();
double[,] intensities = Tools.XYToIntensities(mode: IntensityMode.Density,
xs: xs, ys: ys, width: 50, height: 50, sampleWidth: 4);
var hm = plt.AddHeatmap(intensities);
var cb = plt.AddColorbar(hm);
plt.SaveFig("heatmap_density.png");
高斯插值
可以使用双线性插值和高斯加权从二维数据点创建热图。此选项将生成标准偏差为4的热图。
var plt = new ScottPlot.Plot(600, 400);
Random rand = new Random(0);
int[] xs = DataGen.RandomNormal(rand, 10000, 25, 10).Select(x => (int)x).ToArray();
int[] ys = DataGen.RandomNormal(rand, 10000, 25, 10).Select(y => (int)y).ToArray();
double[,] intensities = Tools.XYToIntensities(mode: IntensityMode.Gaussian,
xs: xs, ys: ys, width: 50, height: 50, sampleWidth: 4);
var hm = plt.AddHeatmap(intensities);
var cb = plt.AddColorbar(hm);
plt.SaveFig("heatmap_gaussian.png");
自定义尺寸
默认情况下,热图从原点开始,每个矩形(单元格)的大小为1个单位,但可以自定义热图偏移和单元格大小。
var plt = new ScottPlot.Plot(600, 400);
double[,] data2D = { { 1, 2, 3 },
{ 4, 5, 6 } };
var hm = plt.AddHeatmap(data2D, lockScales: false);
hm.OffsetX = 10;
hm.OffsetY = 20;
hm.CellWidth = 5;
hm.CellHeight = 10;
plt.SaveFig("heatmap_dimensions.png");
有空方块的热图
可以使用可为空的双精度二维数组来指示某些正方形不包含数据。这允许用户以透明方式显示热图,并实现非矩形热图。
var plt = new ScottPlot.Plot(600, 400);
double?[,] intensities = {
{ 1, 7, 4, null },
{ 9, null, 2, 4 },
{ 1, 4, null, 8 },
{ null, 2, 4, null }
};
var hmc = plt.AddHeatmap(intensities);
var cb = plt.AddColorbar(hmc);
plt.SaveFig("heatmap_transparent.png");
大小和位置
热图的边缘可以定义为定义偏移量和单元大小的替代方法,
var plt = new ScottPlot.Plot(600, 400);
double[,] imageData = DataGen.SampleImageData();
var hm = plt.AddHeatmap(imageData, lockScales: false);
hm.XMin = -100;
hm.XMax = 100;
hm.YMin = -10;
hm.YMax = 10;
plt.SaveFig("heatmap_placement.png");