2016-04-22 106 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提供更好的外觀。對於縮放我已經把他們回來,所以我得到了簡單的復位按鈕..

還要注意的是發佈截圖這裏主要介紹調整,這並非來自圖表的一些新的水平!