我需要在C#应用程序中绘制不同高度和宽度的矩形。矩形可能重叠也可能不重叠。
我认为System.Windows.Forms.DataVisualization.Charting
会得到我需要的东西,但我探索过的每种图表类型都希望数据点由一维中的单个值和另一维中的多个值组成。
我考虑过:Box, Bubble, and Range Bar
。
答案 0 :(得分:0)
以下是使用自定义 Chart
将100个不同颜色和大小的方块随机投放到ChartType Point
个Marker Images
上的最小示例。
您可以修改以从颜色中分离数据点,允许任何大小或形状等。:
int count = 100;
int mSize = 60; // marker size
List<Color> colors = new List<Color>(); // a color list
for (int i = 0; i < count; i++)
colors.Add(Color.FromArgb(255, 255 - i * 2, (i*i) %256, i*2));
Random R = new Random(99);
for (int i = 0; i < count; i++) // create and store the marker images
{
int w = 10 + R.Next(50); // inner width of visible marker
int off = (mSize - w) / 2;
Bitmap bmp = new Bitmap(mSize, mSize);
using (Graphics G = Graphics.FromImage(bmp))
{
G.Clear(Color.Transparent);
G.FillRectangle(new SolidBrush(colors[i]), off, off, w, w);
chart5.Images.Add(new NamedImage("NI" + i, bmp));
}
}
for (int i = 0; i < count; i++) // now add a few points to random locations
{
int p = chart5.Series["S1"].Points.AddXY(R.Next(100), R.Next(100));
chart5.Series["S1"].Points[p].MarkerImage = "NI" + p;
}
请注意,这只是一个快速的;在Link to the original answer about a heat map中,我展示了如何调整 Markers
以及Chart
。在这里,他们将始终保持相同的大小..:
我已将此图像的Alpha颜色从255降低到155,顺便说一句。
放大Chart
时尺寸也保持不变;看看它们分开的程度如何,你可以看到它们之间的空间:
这可能是你想要的,也可能不是你想要的......
请注意,我在第一张图片中的{strong>已停用两个Axes
以获得更好的效果。对于缩放我已将它们重新打开,因此我得到了简单的重置按钮..
另请注意,发布此处的屏幕截图介绍了一些调整级别,这不是来自图表!
答案 1 :(得分:0)
事实证明,理查德·埃里克森有最接近的答案,因为图表包不包含我需要的东西。我正在推进的解决方案是使用点图表来管理轴和诸如此类的东西,但是重载PostPaint事件以有效地绘制我需要的矩形。图表提供了像素值(反之亦然)转换。