формула точечной диаграммы - PullRequest
1 голос
/ 20 декабря 2010

Я пытаюсь создать точечную диаграмму на моей веб-странице с помощью CSS и изображений с несколькими точками.Я успешно создал дизайн, но теперь не могу понять, как на самом деле работает точечная диаграмма.Может ли кто-нибудь дать мне идею, как я могу их устроить?Ширина моего графика 968, а высота 432. как этот график

http://chart.apis.google.com/chart?cht=s&chd=t:12,16,16,24,26,28,41,51,66,68,13,45,81|16,14,22,34,22,31,31,48,71,64,15,38,84&chs=250x100&chl=Hello|World

Я не могу использовать это, но я хочу знать, как это работает

Спасибо за любую помощь.

<?php
$w = 968; $h = 432;
$xmin = 0; $xmax = 968;
$ymin = 10; $ymax = 100;
$x = 10; $y = 10;
$xc = 20;
$yc = 20;
$r = (20)/ 2;
 $xc = $w * (($x - $xmin)/($xmax - $xmin)) - $r . "<br>";
$yc = $h * (($ymax - $y)/($ymax - $ymin)) -$r;
$tr ='';
$data = array("120|90","345|456","45|66","45|45");
foreach($data as $value){
    $new =  explode("|",$value);
    $tr .='<a href="#" style="top:'.$new[0].'px; left:'.$new[1].'px;" class="dot"></a>';
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>

    <style type="text/css">
#most_engaged_graph{
width:968px;
height:432px;
background-color:#CCCCCC;
}
a.dot {
 height:20px;
 width:20px;
 position:absolute;
 background-color:#0033FF;
}
</style>  
</head>
<body>
<div id="most_engaged_graph"> 
<?=$tr?>   
</div>
</body>
</html>

Ответы [ 2 ]

1 голос
/ 20 декабря 2010

Ну, ваш шаг точки равен 20px квадрат, и вам нужно расположить их на графике так, чтобы нижний левый угол указывал начало координат (0,0).

Вам нужно знать масштаб оси,что вы не заявили.Решите, сколько пикселей на расстоянии по вашей оси.

Затем вам нужно преобразовать желаемую позицию каждой точки P(x,y) в позицию на экране.Вы хотите, чтобы центральный пиксель вашего .dot находился в этом месте.

Поскольку координаты экрана идут сверху-слева, а не снизу-слева, вам нужно будет повернуть вертикальные пиксели, поэтому максимум равен нулю.и ноль (или полное отрицание) - высота графика, плюс / минус половина размера вашей точки в обоих случаях.

Дано:

  • W = graph width (px), H = graph height (px)
  • Xmin = minimum x axis, Xmax = maximum x axis
  • Ymin = minimum y axis, Ymax = maximum y axis
  • x = x value on graph (Xmin <= x <= Xmax), y = y value on graph (Ymin <= y <= Ymax)
  • Xc = x-center of dot, Yc = y-center of dot
  • r = dot radius = (dot width) / 2

Тогда:

  • Xc = W * [(x - Xmin)/(Xmax - Xmin)], Yc = H * [(Ymax - y)/(Ymax - Ymin)]
  • left = Xc - r, top = Yc - r

Не проверено, я думаю, что это правильно - возможно, потребуется корректировка.В частности, вычтите 2r из W и H, если вам нужно, чтобы точки появлялись полностью внутри области (это относится ко всему графику, оси и др.).


Пример кода:

<div id="most_engaged_graph"> 
<?php
$dataPoints = array(
                    array('x' => 5, 'y' => 20),
                    array('x' => 80, 'y' => 50),
                    array('x' => 45, 'y' => 5),
                    array('x' => 68, 'y' => 89),
                    array('x' => 22, 'y' => 43)
              );

foreach ($dataPoints as $cPoint) {
    // Assuming $w, $h, $xmin, $ymin, $xmax, $ymax, $r are defined above
    $xc = $w * (($cPoint['x'] - $xmin) / ($xmax - $xmin));
    $yc = $h * (($ymax - $cPoint['y']) / ($ymax - $ymin));

    $cLeft = $xc - $r;
    $cTop  = $yc - $r;
?>
    <a href="#" style="top: <?php echo $cTop; ?>px; left: <?php echo $cLeft; ?>px;" class="dot"></a>
<?php
}
?>
</div>

JQuery версия Демо: http://jsfiddle.net/75Mz5/1/

1 голос
/ 20 декабря 2010

Ну, на самом деле есть две части. Сначала вы должны установить масштаб. Я обычно делаю немного больше, чем крайности. Поэтому, если вы возьмете верхнее, правое, левое и самое нижнее значение, немного прибавьте / вычтите или сделайте так, чтобы оно соответствовало степени десяти. Тогда у вас есть масштаб. Отсюда вы можете использовать математику, чтобы решить, куда идет каждая точка. Он не просто указывает местоположение значения, его нужно масштабировать, чтобы он соответствовал диаграмме.

Итак, допустим, у вас есть масштаб 1000 на 1000. Но ваша диаграмма только 100 на 100. В этом случае каждый пиксель будет иметь значение 10. Таким образом, значение 40,40 будет находиться на 4,4 на ваш сюжет.

Вам также необходимо помнить о существовании отрицательных чисел. Если бы график был от -500 до 500, а не от 0 до 1000, вам нужно было бы переместить 4,4 на 54,54, чтобы разместить их в нужном месте.

Надеюсь, это поможет вам понять все остальное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...