Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Параграф 3. Создание гистограмм
Для построения гистограмм нам потребуется внести в наш класс одну новую функцию и один массив переменных Brush. Можно было воспользоваться классом SolidBrush и по датчику случайных чисел формировать цвета, но все же, более приятно смотреть гистограмму с удачно подобранными соседними цветами (каждый может выполнить подборку цветов на свой вкус). private Brush[] br ={ Brushes.LightGreen,Brushes.Chartreuse,Brushes.LimeGreen,Brushes.Green,Brushes.DarkGreen, Brushes.DarkOliveGreen,Brushes.LightPink,Brushes.LightSeaGreen,Brushes.LightCoral,Brushes.DarkCyan, Brushes.Crimson,Brushes.CornflowerBlue,Brushes.Chocolate,Brushes.CadetBlue,Brushes.BlueViolet, Brushes.Maroon, Brushes.Blue,Brushes.Brown,Brushes.DarkBlue, Brushes.Red, Brushes.Coral,Brushes.DarkRed, Brushes.DarkMagenta, Brushes.DarkOrange,Brushes.DarkOrchid}; И так, нам понадобится всего лишь одна новая функция. Основное отличие - использование функции FillRectangle. #region Рисование Гистограммы //Параметры: a=0 без сдвига цвета a=1 со сдвигом //b = 0 - без разрыва столбиков > 1 - с разрывом и величина разрыва в % public void vDrawGraphRectangular(int a, int c) { string s = string.Empty; string s1 = string.Empty; string s2 = string.Empty; float f = 0; float x1 = 0; float x = viDeltaaxisL; float y = viY - viDeltaaxisH; float fMax = float.MinValue; for (int i = 0; i < viMaxRg; i++) { s = rgsValues[i, 0]; if (fMax < float.Parse(s)) fMax = float.Parse(s); } //Пикселей для рисования по оси х float fdeltax = viX - viDeltaaxisL - viDeltaaxisR; //Пикселей на один отсчет fdeltax = fdeltax / (float)(viMaxRg - 1); //Пикселей для рисования по оси y float fdeltay = viY - 2 * viDeltaaxisH; //Пикселей на одну единицу массива значений fdeltay = fdeltay / fMax; float fdx = 0; if (c!= 0) fdx = (fdeltax * c / 100) / 2; Random rand = new Random(DateTime.Now.Millisecond); int arn = rand.Next((int)br.Length); objBrush = br[arn]; for (int i = 0; i < viMaxRg - 1; i++) { s = rgsValues[i, 0]; f = float.Parse(s); x1 = x + ((float)i * fdeltax); if (a == 0) { graph.FillRectangle(objBrush, x1 + fdx, y - fdeltay * f, fdeltax - 2 * fdx, fdeltay * f); } else { int b = i % br.Length; graph.FillRectangle(br[b], x1 + fdx, y - fdeltay * f, fdeltax - 2 * fdx, fdeltay * f); } if (i == viMaxRg - 2) { int b = (i + 1) % br.Length; s = rgsValues[i + 1, 0]; f = float.Parse(s); x1 = x + ((float)(i + 1) * fdeltax); if (a == 0) { graph.FillRectangle(objBrush, x1 - 2, y - fdeltay * f, 4/*fdeltax*/, fdeltay * f); } else { graph.FillRectangle(br[b], x1 - 2, y - fdeltay * f, 4/*fdeltax*/, fdeltay * f); } } } } #endregion Запишем код обработки нажатия кнопки 2 и выполним решение: private void button2_Click(object sender, EventArgs e) { viNumButton = 2; vCreateRectangleDiagramm(); } private void vCreateRectangleDiagramm() { //Создаем массив значений для вывода на графике vCreateRg(); //Создаем класс и передаем ему размер холсты PaintCl clPaint = new PaintCl(pictureBox1.Width, pictureBox1.Height); //Фон холста clPaint.vSetBackground(Color.White); //Параметры вызоыва: отступы слева, справа, сверху(снизу),Цвет осей, толщина пера clPaint.vDravAxis(50, 50, 30, Color.Red, 2,true); clPaint.vSetPenWidthLine(1); clPaint.vSetPenColorLine(Color.Silver); clPaint.MaxRg = 20; clPaint.vDravGrid(); clPaint.vSetPenWidthLine(2); clPaint.vSetPenColorLine(Color.Green); clPaint.RgValue = rgsValues; //a=0 без сдвига цвета a=1 со сдвигом,b = 0 - без разрыва, > 1 - с разрывом и величина разрыва в % clPaint.vDrawGraphRectangular(1, 5); Font objFont = new Font("Arial", 7, FontStyle.Bold | FontStyle.Italic); clPaint.font = objFont; clPaint.brush = Brushes.Blue; clPaint.vDrawTextAxXNumber(false); //clPaint.vDrawTextAxXValues(true); clPaint.vDrawTextAxYValues(); clPaint.vDrawTextAxYValuesPoint(true, false); //Принимаем нарисованное в pictureBox pictureBox1.Image = clPaint.Bmp; } Цветом показано единственное отличие от кода создания линейной диаграммы. Результат работы кода приведен на Рис.11.: Рис.11. Гистограмма
Date: 2015-09-02; view: 307; Нарушение авторских прав |