Quiero generar un mapa de calor en forma de ventanas. Tengo un conjunto de puntos como entrada. ¿Cómo hacer esto de la manera más simple? Gracias.cómo generar mapas de calor dados los puntos
Respuesta
Divida la superficie en una cuadrícula de celdas y cuente los puntos dentro de cada celda.
Dado el recuento de puntos, calcular un color para cada celda
Comprobar este artículo. Es directo en el tema http://www.codeproject.com/KB/web-image/GHeat_Net.aspx
Aquí hay un método simple que generará un color basado en la posición relativa de un valor entre min y max. Los valores más cercanos a min serán más ecológicos, mientras que los valores más cercanos a max serán más rojos.
Para usar este método, genere su lista de valores y calcule los valores mínimo y máximo. Si está construyendo una grilla, puede manejar el evento RowDataBound o algo similar y llamar al método HeatMap desde allí. Obtenga una referencia a la celda y establezca el color de fondo en el color devuelto por el método 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
};
}
Esta es una solución para el código de 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);
}
¿Y exactamente cómo es esto diferente de [la respuesta de Sam] (http://stackoverflow.com/a/11570954/947171)? –
En Windows Forms, el código de Sam no se ejecuta. Los campos ARGB están listos solo. –
Sobre la base de las respuestas que ya están aquí, este método permite especificar el Colors
que desea utilizar como máximo y colores min.
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);
}
Los resultados de este aspecto para una prueba DataGrid
con algunos datos de la muestra.
Si uso los siguientes colores Color firstColour = Color.Blue; Color secondColour = Color.Amarillo; Acabo de obtener tonos de gris – Chris
Una solución que va de rojo a amarillo a verde
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;
}
Esto funcionó bien para mí.
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);
}
Si desea rojo a verde a través de amarillo, también puede utilizar HSL para obtener su mapa de calor. Los números en esa instancia serían 0 - 60, donde 0 = rojo y 60 = verde (see figure 11 on this link).
de implementar, es necesario utilizar System.Runtime.InteropServices y añadir lo siguiente:
[DllImport("shlwapi.dll")]
public static extern int ColorHLSToRGB(int H, int L, int S);
En el método, val es un valor largo y m_iMax es el número más grande de la colección, se puede cambiar en los términos requeridos:
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)));
}
el siguiente es el resultado del código anterior en una tabla HTML:
La versión C# de "Curtis White" 's respuesta:
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. cómo construir un RTree usando los puntos de datos dados
- 2. La generación de mapas de densidad/calor como SpatialKey
- 3. Biblioteca de generación de mapas de calor para PHP
- 4. Elija los puntos k más cercanos de los n puntos dados
- 5. Cómo calcular el vértice de una parábola dados tres puntos
- 6. ¿Cómo hacen los mapas de calor del sitio web datos precisos?
- 7. Dados 3 puntos, ¿cómo calculo el vector normal?
- 8. Creando mapas de calor usando el elemento <canvas>?
- 9. Mapa de mapas: ¿cómo mantener los mapas interiores como mapas?
- 10. Dados 2 puntos, ¿cómo dibujo una línea en ángulo recto con respecto a la línea formada por los dos puntos?
- 11. calcular la distancia dados 2 puntos, latitud y longitud
- 12. generar calor en un teléfono Android (de código, por supuesto)
- 13. Cómo extraer los datos de píxeles ¿Usa el paquete de mapas de puntos de R?
- 14. Java Generar número aleatorio entre dos valores dados
- 15. Creación de mapas de calor para la aplicación Silverlight de Bing Maps
- 16. Dados: Simulando un juego de Dados
- 17. Reconocimiento de valor nominal de los dados
- 18. ¿Se pueden generar mapas normales a partir de una textura?
- 19. ¿Cómo acceder a los sensores de calor de la CPU?
- 20. ¿Cómo puedo generar una imagen en Ruby sin dependencias externas?
- 21. alternativa a los mapas
- 22. Mapa de calor geográfico en R
- 23. generar direcciones a pie con la aplicación Mapas de iOS
- 24. ¿Cómo puedo generar la siguiente matriz y vector a partir de los datos de entrada dados en MATLAB?
- 25. Mapa de calor de latitud y longitud
- 26. ¿Generar puntos aleatorios distribuidos como ciudades?
- 27. Ordenando mapas dentro de los mapas por valor
- 28. Creación de un mapa de calor continuo en R
- 29. cómo generar números dados sus factores primos, pero con exponentes desconocidos?
- 30. Cómo alinear los círculos de los mapas en el mapa
Curtis, lo que hace tu dosis de solución? El código que publiqué es esencialmente escaso pero se ejecuta (en WPF). – Sam
Su código no se compila en una aplicación Windows Form. Los campos ARGB están listos solo.Color es un Struct y ARGB solo tienen métodos get. –