PDA

View Full Version : سوال: در مورد نمودار میله ای



fmaleki
یک شنبه 15 بهمن 1391, 12:25 عصر
سلام چطور میتونم یک نمودار میله ای بکشم که روی محور افقی بازه زمانی 24 ساعت شبانه روز رو داشته باشمو در هر بازه از ساعت بتونم تعداد زیاد میله با قطر خیلی کم رسم کنم (مثلا برای نشون دادن هر تماسدر بازه زمانی خودش یک میله بکشم و امکان اینو داشته باشه که تا 30تا میله واسه هر بازه ساعت بتونم بکشم) ؟

mamali-mohammad
یک شنبه 15 بهمن 1391, 12:44 عصر
این کارو خودت که نمیتونی انجام بدی چون خیلی گنده است
شما کافیه اطلاعات رو ثبت کنید و با کلاس اماده و رایگاه pChart به راحتی نمودارتو رسم کنی

Tarragon
یک شنبه 15 بهمن 1391, 14:40 عصر
سیستم های highchart هم سیستم خوبیه خودم استفاده کردم هم خیلی راحته هم خیلی زیبا.

MMSHFE
یک شنبه 15 بهمن 1391, 22:29 عصر
اگه خدا بخواد تا امشب براتون یک نمونه ساده مینویسم.

MMSHFE
یک شنبه 15 بهمن 1391, 22:30 عصر
سیستم های highchart هم سیستم خوبیه خودم استفاده کردم هم خیلی راحته هم خیلی زیبا.
امین جان، highchart که تحت PHP نیست.

mamali-mohammad
یک شنبه 15 بهمن 1391, 23:45 عصر
جناب شهرکی حتما pchart رو دیدید
چند صد نمودار زیبا و حرفه ای داره و با ساده ترین اطلاعات میشه پیادش کرد

dousti_design
دوشنبه 16 بهمن 1391, 00:13 صبح
سلام چطور میتونم یک نمودار میله ای بکشم که روی محور افقی بازه زمانی 24 ساعت شبانه روز رو داشته باشمو در هر بازه از ساعت بتونم تعداد زیاد میله با قطر خیلی کم رسم کنم (مثلا برای نشون دادن هر تماسدر بازه زمانی خودش یک میله بکشم و امکان اینو داشته باشه که تا 30تا میله واسه هر بازه ساعت بتونم بکشم) ؟
همونطور که دوستمون گفتن من هم پیشنهاد میکنم از pchart اسفتفاده کنید. خیلی ساده میتونید بهش دیتا بدید و نمودار رسم کنه
فکر نمیکنم نیازی باشه که خودتون بنویسید. حالا فرضا که یه حالت خیلی خاص میخاید که کلاس pchart پوشش نمیده. خب توی pchart یه تغییر کوچیک بدید حل میشه

MMSHFE
دوشنبه 16 بهمن 1391, 00:48 صبح
کد نمونه رو دانلود و تست کنید. این کد رو نوشتم، نه برای اینکه بگم بهتر از pChart یا سایر کلاسهای مشابه هست، بلکه فقط برای اینکه بدونید ساخت یک اسکریپت تولید نمودار، کار زیاد سختی نیست. ازطرفی با روش کار هم تا حدودی آشنا بشین. اگه درمورد اسکریپت سؤالی بود در خدمتم. موفق باشید.

fmaleki
سه شنبه 17 بهمن 1391, 08:53 صبح
کد نمونه رو دانلود و تست کنید. این کد رو نوشتم، نه برای اینکه بگم بهتر از pChart یا سایر کلاسهای مشابه هست، بلکه فقط برای اینکه بدونید ساخت یک اسکریپت تولید نمودار، کار زیاد سختی نیست. ازطرفی با روش کار هم تا حدودی آشنا بشین. اگه درمورد اسکریپت سؤالی بود در خدمتم. موفق باشید.
سلام ممنون از کمکتون ولی میخوام بدونم میشه مثلا من زمان تماس رو به نمودار بدم اون خودش بره توی بازه زمانی مناس بزاره؟

MMSHFE
سه شنبه 17 بهمن 1391, 11:20 صبح
بله. شما میتونید با کمک تابع SetValue این کار رو انجام بدین. پارامتر اول، ساعت هست، پارامتر دوم، بازه زمانی (1 تا 30 یعنی هر 2 دقیقه میشه 1 بازه. مثلاً دقیقه 21 و 22 توی بازه 11 قرار میگیره و دقیقه 5 و 6 توی بازه 3) و پارامتر سوم هم تعداد بازدیدی هست که میخواین توی نمودار قرار بگیره. مثلاً میتونید با کد زیر، تعداد بازدید ساعت 5 و بازه زمانی 4 (دقایق 7 و 8) رو یک واحد اضافه کنید:

$dc = new DailyChart();
$dc->SetValue(5, 4, $dc->GetValues[4][3] + 1); // GetValues indices are 1 unit less than SetValue indices
موفق باشید.

fmaleki
چهارشنبه 18 بهمن 1391, 08:53 صبح
بله. شما میتونید با کمک تابع SetValue این کار رو انجام بدین. پارامتر اول، ساعت هست، پارامتر دوم، بازه زمانی (1 تا 30 یعنی هر 2 دقیقه میشه 1 بازه. مثلاً دقیقه 21 و 22 توی بازه 11 قرار میگیره و دقیقه 5 و 6 توی بازه 3) و پارامتر سوم هم تعداد بازدیدی هست که میخواین توی نمودار قرار بگیره. مثلاً میتونید با کد زیر، تعداد بازدید ساعت 5 و بازه زمانی 4 (دقایق 7 و 8) رو یک واحد اضافه کنید:

$dc = new DailyChart();
$dc->SetValue(5, 4, $dc->GetValues[4][3] + 1); // GetValues indices are 1 unit less than SetValue indices
موفق باشید.
سلام
میخواستم بدونمتوی داخل کدی که برام فرستادید اگه بخوام مابین هر کدوم از میله هام یه فاصله خیلی کم مثلا یک پیکسل بزارم کجای کد رو باید تغییر بدم؟
یه مشکل دیگه هم که دارم اینه وقتی میخوام سایز نمودار روکوچیک کنم به مشکل برمیخورم و نمودارهام سر جای خودشون نشون داده نمیشه کمی به راست متایل میشه(توی بازه زمانی مشخص خودش نمودار رو نشون نمیده)

fmaleki
شنبه 21 بهمن 1391, 08:42 صبح
بله. شما میتونید با کمک تابع SetValue این کار رو انجام بدین. پارامتر اول، ساعت هست، پارامتر دوم، بازه زمانی (1 تا 30 یعنی هر 2 دقیقه میشه 1 بازه. مثلاً دقیقه 21 و 22 توی بازه 11 قرار میگیره و دقیقه 5 و 6 توی بازه 3) و پارامتر سوم هم تعداد بازدیدی هست که میخواین توی نمودار قرار بگیره. مثلاً میتونید با کد زیر، تعداد بازدید ساعت 5 و بازه زمانی 4 (دقایق 7 و 8) رو یک واحد اضافه کنید:

$dc = new DailyChart();
$dc->SetValue(5, 4, $dc->GetValues[4][3] + 1); // GetValues indices are 1 unit less than SetValue indices
موفق باشید.
خواهشا جوابمو بدید خیلی برام ضروریه

MMSHFE
سه شنبه 24 بهمن 1391, 08:02 صبح
این متد رو بجای متد MakeChart قبلی توی کلاس DailyChart جایگزین کنید:


public function MakeChart($fileName, $width = 800, $height = 600) {
$width = max($width, 1520);
$height = max($height, 600);
$xpos = $width / 10;
$ypos = $height - ($height / 10);
$step = $this->calcMax() > 0 ? ($height - ($height - $ypos)) / $this->calcMax() : 0;
$bw = ($width - $xpos) / 24 / 60;
$fileName = str_replace('.', '-', $fileName) . '.png';
$img = ImageCreateTrueColor($width, $height);
$axisColor = ImageColorAllocate($img, 0, 0, 0);
$backColor = ImageColorAllocate($img, 191, 191, 255);
$rectColor = ImageColorAllocate($img, 0, 0, 127);
$textColor = ImageColorAllocate($img, 127, 0, 0);
ImageFilledRectangle($img, 0, 0, $width - 1, $height - 1, $backColor);
ImageRectangle($img, 0, 0, $width - 1, $height - 1, $rectColor);
ImageLine($img, $xpos, $ypos + 1, $width - 1, $ypos + 1, $axisColor);
ImageLine($img, $xpos, 1, $xpos, $ypos + 1, $axisColor);
for($i = 0; $i < 24; $i++) {
ImageString($img, 1, $xpos + $i * (($width - $xpos) / 24) + (($width - $xpos) / 24 / 2), $ypos + 10, $i + 1, $textColor);
for($j = 0; $j < 30; $j++) {
$pipeColor = ImageColorAllocate($img, rand(0, 255), rand(0, 255), rand(0, 255));
$bh = $this->values[$i][$j] * $step;
ImageFilledRectangle($img, $xpos + $i * 60 + ($j * 2 * $bw), $ypos, $xpos + $i * 60 + ($j * 2 * $bw) + $bw, ($bh > 0 ? $ypos - $bh + 1 : $ypos), $pipeColor);
ImageFilledRectangle($img, $xpos + $i * 60 + (($j * 2 + 1) * $bw), $ypos, $xpos + $i * 60 + (($j * 2 + 1) * $bw) + $bw, ($bh > 0 ? $ypos - $bh + 1 : $ypos), $backColor);
}
}
for($i = 0; $i <= $this->calcMax(); $i++) {
ImageString($img, 3, $xpos / 10, $ypos - $i * $step, $i, $textColor);
}
ImagePNG($img, $fileName, 9);
ImageDestroy($img);
return '<img src="' . $fileName . '"/>';
}
}

MMSHFE
سه شنبه 24 بهمن 1391, 08:34 صبح
یه مشکل دیگه هم که دارم اینه وقتی میخوام سایز نمودار روکوچیک کنم به مشکل برمیخورم و نمودارهام سر جای خودشون نشون داده نمیشه کمی به راست متایل میشه(توی بازه زمانی مشخص خودش نمودار رو نشون نمیده)
دلیلش طبیعیه: شما 24 ساعت دارین و هر ساعت 30 نمودار داره که اگه برای هر کدوم، 1 پیکسل هم بگذاریم، میشه 720 پیکسل و 80 پیکسل هم برای نمایش مقادیر محور عمودی گذاشتم که میشه 800 پیکسل و عملاً کوچکتر از این اندازه مقدور نیست و بخشی از نمودارها روی هم میفته.