2016-04-22 104 views
0

我需要在C#应用程序中绘制不同高度和宽度的矩形。矩形可以重叠也可以不重叠。制图任意尺寸的矩形

我认为System.Windows.Forms.DataVisualization.Charting会有我需要的,但是我探索过的每种图表类型都希望数据点由一个维度中的单个值和另一个维度中的多个值组成。

我考虑过:Box, Bubble, and Range Bar

+0

如何:在Windows窗体上绘制填充的矩形:https://msdn.microsoft.com/en-us/library/ztxk24yx(v=vs.110).aspx – Vertexwahn

+0

我改写了OP。屏幕上我需要的不仅仅是矩形。它需要在用户可以放大和缩小的图表中。 –

+0

此论坛不是为了帮助您找到图书馆,因此除非您自己计划实施此功能,否则您应该到处看看其他地方 – Glubus

回答

0

原来,理查德埃里克森有最接近的答案,因为图表包不包含我所需要的。我正在向前迈进的解决方案是使用一个Point图来管理坐标轴和什么,但重载PostPaint事件以有效地绘制我需要的矩形。该图表提供了数值到像素(反之亦然)的转换。

0

这里是抛出100个正方形的不同的颜色,并用定制Marker Images随机尺寸到的ChartType Point一个Chart最小例子。

enter image description here

您可以修改,以取消夫妇从颜色的数据点,允许任何尺寸或形状等..:

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。在这里,他们将始终保持相同的尺寸..:

enter image description here

我已经降低了色彩的阿尔法这个形象从255到155,顺便说一句。

在放大Chart时,尺寸也保持不变;看看他们是怎么漂很好分开,所以你可以看到它们之间的空间:

enter image description here

这可能是也可能不是你想要的,当然..

请注意,我有残疾在第一张图像中为Axes提供更好的外观。对于缩放我已经把他们回来,所以我得到了简单的复位按钮..

还要注意的是发布截图这里主要介绍调整,这并非来自图表的一些新的水平!