我想生成一个窗口形式的热图。我有一组点作为输入。如何以最简单的方式去做这件事? 谢谢。如何生成给定点的热图
回答
将表面分成单元网格,并计算每个单元格内的点。
给定点数,计算每个单元的颜色
选中此篇文章。这是直接关于这个问题http://www.codeproject.com/KB/web-image/GHeat_Net.aspx
这是一个简单的方法,将根据最小值和最大值之间的值的相对位置生成颜色。接近min的值会更绿,而接近max的值会更红。
要使用此方法,请生成值列表并计算最小值和最大值。如果你正在构建一个网格,你可以处理RowDataBound事件或类似的东西,并从那里调用HeatMap方法。获取对单元格的引用,并将背景颜色设置为由HeatMap方法返回的颜色。
public Color HeatMap(decimal value, decimal min, decimal max)
{
decimal val = (value - min)/(max-min);
return new Color
{
A = 255,
R = Convert.ToByte(255 * val),
G = Convert.ToByte(255 * (1-val)),
B = 0
};
}
这是修复Sam的代码。在答案已经在这里
public Color HeatMapColor(decimal value, decimal min, decimal max)
{
decimal val = (value - min)/(max - min);
int r = Convert.ToByte(255 * val);
int g = Convert.ToByte(255 * (1 - val));
int b = 0;
return Color.FromArgb(255,r,g,b);
}
和[Sam's answer](http://stackoverflow.com/a/11570954/947171)有何不同? – 2014-03-14 20:08:34
在Windows窗体中,Sam的代码无法运行。 ARGB字段仅准备好。 – 2014-06-03 21:58:19
大厦,该方法允许你指定Colors
你想为最大值和最小值的颜色使用。
private Color HeatMapColor(double value, double min, double max)
{
Color firstColour = Color.RoyalBlue;
Color secondColour = Color.LightSkyBlue;
// Example: Take the RGB
//135-206-250 // Light Sky Blue
// 65-105-225 // Royal Blue
// 70-101-25 // Delta
int rOffset = Math.Max(firstColour.R, secondColour.R);
int gOffset = Math.Max(firstColour.G, secondColour.G);
int bOffset = Math.Max(firstColour.B, secondColour.B);
int deltaR = Math.Abs(firstColour.R - secondColour.R);
int deltaG = Math.Abs(firstColour.G - secondColour.G);
int deltaB = Math.Abs(firstColour.B - secondColour.B);
double val = (value - min)/(max - min);
int r = rOffset - Convert.ToByte(deltaR * (1 - val));
int g = gOffset - Convert.ToByte(deltaG * (1 - val));
int b = bOffset - Convert.ToByte(deltaB * (1 - val));
return Color.FromArgb(255, r, g, b);
}
结果看起来像这样的测试DataGrid
与一些示例数据。
如果我使用以下颜色 颜色firstColour = Color.Blue; 颜色secondColour = Color.Yellow; 我只是得到灰色阴影 – Chris 2014-11-30 20:31:47
溶液从红色去黄绿色
static Color CreateHeatColor(int value, decimal max)
{
if (max == 0) max = 1M;
decimal pct = value/max;
Color color = new Color();
color.A = 255;
if (pct < 0.34M)
{
color.R = (byte) (128 + (127 * Math.Min(3 * pct, 1M)));
color.G = 0;
color.B = 0;
}
else if (pct < 0.67M)
{
color.R = 255;
color.G = (byte) (255 * Math.Min(3 * (pct - 0.333333M), 1M));
color.B = 0;
}
else
{
color.R = (byte)(255 * Math.Min(3 * (1M - pct), 1M));
color.G = 255;
color.B = 0;
}
return color;
}
这对我行之有效。
public Color HeatMap(float value, float max)
{
int r, g, b;
float val = value/max; // Assuming that range starts from 0
if (val > 1)
val = 1;
if (val > 0.5f)
{
val = (val - 0.5f) * 2;
r = Convert.ToByte(255 * val);
g = Convert.ToByte(255 * (1 - val));
b = 0;
}
else
{
val = val * 2;
r = 0;
g = Convert.ToByte(255 * val);
b = Convert.ToByte(255 * (1 - val));
}
return Color.FromArgb(255, r, g, b);
}
如果你想通过黄色变为绿色,也可以使用HSL来获取热图。在这种情况下的数字是0-60,其中0 =红色和60 =绿色(see figure 11 on this link)。
要实现,你需要使用System.Runtime.InteropServices并添加以下内容:
[DllImport("shlwapi.dll")]
public static extern int ColorHLSToRGB(int H, int L, int S);
在该方法中,VAL是一个长期的价值和m_iMax是集合中的数量最多,你可以改变它根据需要:
if (val == 0)
return ColorTranslator.ToHtml(Color.FromArgb(255, 255, 255)); // white
else
{
// 0 = red, 60 = green
int col = 60 - (int)(60 * val/m_iMax);
return ColorTranslator.ToHtml(ColorTranslator.FromWin32(ColorHLSToRGB(col, 120, 240)));
}
下面是一个HTML表格上方的代码的结果:
“柯蒂斯白” 的回答的C#版本:
public Color HeatMap(decimal value, decimal min, decimal max)
{
decimal val = (value - min)/(max - min);
int A, B, R, G;
A = 255;
R = Convert.ToByte(255 * val);
B = Convert.ToByte(255 * (1 - val));
G = 0;
return Color.FromArgb(A, R, G, B);
}
- 1. 从给定数据集生成热图
- 2. 从给定的[lat,lon,density]数据集合生成KML热图
- 3. r中的热图生成
- 4. 如何生成给定3个3D点的3D几何?
- 5. 为Google Earth生成热图的Java图像生成
- 6. 如何设置固定图像地图热点点?
- 7. 用于PHP的热图生成库
- 8. 用angularjs生成lat-lng的热图
- 9. 如何生成Bing热图数据这样的文件?
- 10. 使用PostGIS从点数据生成热量/密度图
- 11. 如何为给定的javascript生成调用图?
- 12. 如何使用python和给定的数据生成图像?
- 13. 如何检测图像中的热点
- 14. 如何创建热点的图像
- 15. 使用R或Python生成热图
- 16. 如何使用ruby-on-rails生成热图?
- 17. 如何使用seaborn生成高分辨率热图?
- 18. 带有指定坐标点的热图
- 19. 可点击的热图图
- 20. Sitecore - 如何生成站点地图xml
- 21. 如何修改使用ggplot的geom_tile生成的热图的图例?
- 22. 如何根据给定比例[Bing Map]生成地图?
- 23. 平面图图像的热图生成器
- 24. 如何从图像的热图数据生成边界框数据?
- 25. 如何创建特定的热图?
- 26. 生成中的R点图
- 27. jquery图像热点
- 28. 生成密度图,其中域和给定的发生率
- 29. 给ID /类生成图像
- 30. 如何生成给定头文件的空定义
柯蒂斯,那么你的补丁修复?我发布的代码是intentally稀疏,但它运行(在WPF中)。 – Sam 2012-07-21 00:24:50
您的代码不在Windows窗体应用程序中生成。 ARGB字段仅准备好。颜色是一个结构和ARGB只有获得方法。 – 2014-06-03 21:58:41