我想生成一個窗口形式的熱圖。我有一組點作爲輸入。如何以最簡單的方式去做這件事? 謝謝。如何生成給定點的熱圖
回答
將表面分成單元網格,並計算每個單元格內的點。
給定點數,計算每個單元的顏色
選中此篇文章。這是直接關於這個問題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. 熱圖生成
- 3. 從給定的[lat,lon,density]數據集合生成KML熱圖
- 4. 如何使用ggplot2生成熱圖?
- 5. 如何爲asp.net網站生成熱圖?
- 6. r中的熱圖生成
- 7. 在Python中生成熱圖
- 8. 如何生成給定3個3D點的3D幾何?
- 9. 爲Google Earth生成熱圖的Java圖像生成
- 10. 如何設置固定圖像地圖熱點點?
- 11. 用angularjs生成lat-lng的熱圖
- 12. 用於PHP的熱圖生成庫
- 13. 如何在Seaborn FacetGrid中生成熱圖貼圖
- 14. 如何生成Bing熱圖數據這樣的文件?
- 15. 如何生成塊大小不均勻的熱圖?
- 16. 使用PostGIS從點數據生成熱量/密度圖
- 17. 使用散點數據集在MatPlotLib中生成熱圖
- 18. 如何爲給定的javascript生成調用圖?
- 19. Java - 如何生成給定大小的圖像?
- 20. 如何使用python和給定的數據生成圖像?
- 21. 如何創建熱點的圖像
- 22. 如何檢測圖像中的熱點
- 23. 使用R或Python生成熱圖
- 24. 如何在同一尺度上生成兩個熱圖?
- 25. 如何使用seaborn生成高分辨率熱圖?
- 26. 如何使用ruby-on-rails生成熱圖?
- 27. 帶有指定座標點的熱圖
- 28. 如何修改使用ggplot的geom_tile生成的熱圖的圖例?
- 29. 可點擊的熱圖圖
- 30. Sitecore - 如何生成站點地圖xml
柯蒂斯,那麼你的補丁修復?我發佈的代碼是intentally稀疏,但它運行(在WPF中)。 – Sam 2012-07-21 00:24:50
您的代碼不在Windows窗體應用程序中生成。 ARGB字段僅準備好。顏色是一個結構和ARGB只有獲得方法。 – 2014-06-03 21:58:41