PDA

View Full Version : رسم نمودار



hamix666
جمعه 19 شهریور 1395, 11:08 صبح
سلام من می خوام برای دیتا بیسم یک نمودار رسم کنم که مثلا در هر ماه چقدر در آمد بوده ولی نمی دونم چی کار باید بکنم راهنمایی پلیز

mrprestige
جمعه 19 شهریور 1395, 11:27 صبح
دوست من ، با اینکه سوالت خیلی کلی بود با این حال برای رسم نمودار میتونی از کنترل Chart داخل Toolbox استفاده کنی.

hamix666
جمعه 19 شهریور 1395, 12:38 عصر
دوست من ، با اینکه سوالت خیلی کلی بود با این حال برای رسم نمودار میتونی از کنترل Chart داخل Toolbox استفاده کنی.
خوب می شه یکم توضیح بدی چطوری باهاش کار کنم؟

mrprestige
جمعه 19 شهریور 1395, 15:53 عصر
خب دوست من برای اینکه بتونی با Chart کار کنی باید این مراحل که میگم رو مو به مو جلو بری در مرحله اول باید بعد از اینکه کنترل chart رو روی صفحه قرار دادی تابع کتابخونه ای اون یعنی

using System.Windows.Forms.DataVisualization.Charting;

به قسمت usingها اضافه کنی

سپس صفحه فرم رو ( برای مثال ) یه این شکل درست کن
142459

حالا در کنترل " نمایش نمودار " این کد رو بنویس

try
{
long[] Sud = {long.Parse(textBox1.Text), long.Parse(textBox2.Text), long.Parse(textBox3.Text)};
chart1.Palette = ChartColorPalette.Berry;
chart1.Titles.Clear();
chart1.Series.Clear();
chart1.Titles.Add("نمودار فروش سه سال ");
var seri = new Series {ChartType = SeriesChartType.Column};
for (int i = 0; i < 3; i++)
seri.Points.AddXY(2000 + i, Sud[i]);
chart1.Series.Add(seri);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}

و اگه بخوام توضیحاتی درباره این کدی که نوشتم بهت بگم این میشه که در مرحله اول اومد یه متغییر آرایه ای از نوع Long گرفتم به نام sud ( سود) که برای نمایش سود هر سه سال م هست که داخش Textbox هام رو معرفی کردم در مرحله بعد اومدم رنگ چارت م رو رو مقدارد دهی کردم (همون ChartColorPalette ) و در مرحله بعد اومدم عنوان و Series خودم رو پاک کردم که اگه از قبل وجود داشتن موقع اجرای برنامه پاک بشن و با مقدار جدیدی که بهشون میدم مقداردهی بشن حالا شاید برات سوال بشه Series چیه در واقع همون شاخه های ما در Chart هست که شما در Chart اونارو به شکل ستون میبینید . در مرحله بعد ، بعد از اینکه یه عنوان برای chart مون میزاریم بعد میایم Series یا همون شاخه های خودمون رو نوع نمایشش رو به صورت Column یا همون ستون مقدار میدیم اینجا رو دقت کن ، یه حلق درست میکنیم از 0 تا 3 چرا؟ چون ما سه تا textbox قرار دادیم روی فرم مون و میخوایم براساس این سه تا تکست باکس مقداردهی انجام بشه و اینکه دقت کن توی حلقه For من نوشتم i< 3 یعنی حلقه تا 2 ایجاد میشه چرا که وقتی من متغییر sud رو ایجاد کردم از نوع آرایه بود و آرایه ها از صفر شروع میشن پس میشه 0،1،2 برای textbox هام بعد به متغیر Series م که نامش seri هست اومدم بهش point دادم تا محور X وY رو مقدار دهی کنم و در آخر seri رو ادد کردم Series مربوط به Chart1 تا مقدار دهی نهایی انجام بشه . امیدوارم توضیحات برات گیرا بوده باشه و راستی یکم که با Chart کار کردی برو سراغ Component های مربوط به Chart مثل MS Chart و ... چون معمولا Component ها تکمیل ترن .

پیروز و موفق باشید .

mohammad jamalian
جمعه 19 شهریور 1395, 19:19 عصر
سلام من می خوام برای دیتا بیسم یک نمودار رسم کنم که مثلا در هر ماه چقدر در آمد بوده ولی نمی دونم چی کار باید بکنم راهنمایی پلیز
سلام
اگه در همین جا سرچ کنید آموزش های خوبی برای رسم نمودار پیدا می کنید.

hamix666
جمعه 19 شهریور 1395, 22:59 عصر
خب دوست من برای اینکه بتونی با Chart کار کنی باید این مراحل که میگم رو مو به مو جلو بری در مرحله اول باید بعد از اینکه کنترل chart رو روی صفحه قرار دادی تابع کتابخونه ای اون یعنی

using System.Windows.Forms.DataVisualization.Charting;

به قسمت usingها اضافه کنی

سپس صفحه فرم رو ( برای مثال ) یه این شکل درست کن
142459

حالا در کنترل " نمایش نمودار " این کد رو بنویس

try
{
long[] Sud = {long.Parse(textBox1.Text), long.Parse(textBox2.Text), long.Parse(textBox3.Text)};
chart1.Palette = ChartColorPalette.Berry;
chart1.Titles.Clear();
chart1.Series.Clear();
chart1.Titles.Add("نمودار فروش سه سال ");
var seri = new Series {ChartType = SeriesChartType.Column};
for (int i = 0; i < 3; i++)
seri.Points.AddXY(2000 + i, Sud[i]);
chart1.Series.Add(seri);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}

و اگه بخوام توضیحاتی درباره این کدی که نوشتم بهت بگم این میشه که در مرحله اول اومد یه متغییر آرایه ای از نوع Long گرفتم به نام sud ( سود) که برای نمایش سود هر سه سال م هست که داخش Textbox هام رو معرفی کردم در مرحله بعد اومدم رنگ چارت م رو رو مقدارد دهی کردم (همون ChartColorPalette ) و در مرحله بعد اومدم عنوان و Series خودم رو پاک کردم که اگه از قبل وجود داشتن موقع اجرای برنامه پاک بشن و با مقدار جدیدی که بهشون میدم مقداردهی بشن حالا شاید برات سوال بشه Series چیه در واقع همون شاخه های ما در Chart هست که شما در Chart اونارو به شکل ستون میبینید . در مرحله بعد ، بعد از اینکه یه عنوان برای chart مون میزاریم بعد میایم Series یا همون شاخه های خودمون رو نوع نمایشش رو به صورت Column یا همون ستون مقدار میدیم اینجا رو دقت کن ، یه حلق درست میکنیم از 0 تا 3 چرا؟ چون ما سه تا textbox قرار دادیم روی فرم مون و میخوایم براساس این سه تا تکست باکس مقداردهی انجام بشه و اینکه دقت کن توی حلقه For من نوشتم i< 3 یعنی حلقه تا 2 ایجاد میشه چرا که وقتی من متغییر sud رو ایجاد کردم از نوع آرایه بود و آرایه ها از صفر شروع میشن پس میشه 0،1،2 برای textbox هام بعد به متغیر Series م که نامش seri هست اومدم بهش point دادم تا محور X وY رو مقدار دهی کنم و در آخر seri رو ادد کردم Series مربوط به Chart1 تا مقدار دهی نهایی انجام بشه . امیدوارم توضیحات برات گیرا بوده باشه و راستی یکم که با Chart کار کردی برو سراغ Component های مربوط به Chart مثل MS Chart و ... چون معمولا Component ها تکمیل ترن .

پیروز و موفق باشید .
ببین من می خوام برای هر ماه در یک سال رو از بانک بخونم وقتی میام ماه ها رو تعریف می کنم 6 تا از اونارو زیر نمودار مینویسه یعنی یکی در میون ؟؟؟

mrprestige
شنبه 20 شهریور 1395, 18:59 عصر
نه دیگه برای چی یکی در میون ؟؟؟ . من که حلقه For رو در بالا برات توضیح دادم ! خب در اینجا با توجه به مسئله شما هر سال 12 ماه داره پس توی حلقه مینویسی i=1 و i< 13 و بعد توی قسمت Point.AddXY مقدار اول رو برابر با i قرار میدی و مقدار دوم که توضیح دادم . سوال پیش اومد بگو اگه بنده هم جواب ندادم (نذاری بحساب بی اعتنایی ) دوستان و اساتید گروه حتما پاسخ میدن دوست من .

hamix666
یک شنبه 21 شهریور 1395, 00:20 صبح
نه دیگه برای چی یکی در میون ؟؟؟ . من که حلقه For رو در بالا برات توضیح دادم ! خب در اینجا با توجه به مسئله شما هر سال 12 ماه داره پس توی حلقه مینویسی i=1 و i< 13 و بعد توی قسمت Point.AddXY مقدار اول رو برابر با i قرار میدی و مقدار دوم که توضیح دادم . سوال پیش اومد بگو اگه بنده هم جواب ندادم (نذاری بحساب بی اعتنایی ) دوستان و اساتید گروه حتما پاسخ میدن دوست من .


private void btnsave_Click(object sender, EventArgs e)
{

try
{
string[] mah = { "فروردین", "اردیبهشت", "خرداد", "تیر", "مرداد", "شهریور", "مهر", "آباد", "آذر", "دی", "بهمن", "اسفند" };
chart1.Palette = ChartColorPalette.Berry;
chart1.Titles.Clear();
chart1.Series.Clear();
chart1.Titles.Add("نمودار فروش سه سال ");
var seri = new Series { ChartType = SeriesChartType.Column };
for (int i = 0; i < 12; i++)
seri.Points.AddXY(mah[i], 1000+i);
chart1.Series.Add(seri);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}


142508

hamix666
یک شنبه 21 شهریور 1395, 00:21 صبح
ببین منظورم اینه

mrprestige
یک شنبه 21 شهریور 1395, 18:36 عصر
درسته متوجه شدم دوست من ، این به این خاطر هست تعداد X Point نمودار شما کمتر از اون چیزی هست که به ورودیش دادید به همین خاطر دوتا یکی کرده برای رفع این قضیه توی Form_Load اینو بنویس

chart1.ChartAreas[0].AxisX.Interval = 1;
chart1.ChartAreas[0].AxisX.Minimum = 0;
chart1.ChartAreas[0].AxisX.Maximum = 13;


142514
پیروز و موفق باشی

hamix666
دوشنبه 22 شهریور 1395, 19:28 عصر
درسته متوجه شدم دوست من ، این به این خاطر هست تعداد X Point نمودار شما کمتر از اون چیزی هست که به ورودیش دادید به همین خاطر دوتا یکی کرده برای رفع این قضیه توی Form_Load اینو بنویس

chart1.ChartAreas[0].AxisX.Interval = 1;
chart1.ChartAreas[0].AxisX.Minimum = 0;
chart1.ChartAreas[0].AxisX.Maximum = 13;


142514
پیروز و موفق باشی

مرسی درست شد حالا اگه بخوام بالای هر ستون هم مقدار همون ستون رو نمایش بده چی کار باد کنم؟

mrprestige
دوشنبه 22 شهریور 1395, 21:56 عصر
مجددا سلام دوست من ، خب کافیه انتها آخرین خط دستوری که توی حلقه For نوشتی این خط کد رو اضافه کنی

seri.IsValueShownAsLabel = true;

موفق باشی