2013-06-17 3 views
1

Я пытаюсь присвоить метку оси x диаграммы, метка - это нормальная текстовая строка, хранящаяся в массиве в $ gsettings ['axisXlabel']. Несчастливо pCharts SetSerieDescription, похоже, не работает должным образом.SetSerieDescription - pChart не работает

Ниже приведена функция, создающая графики и вложение токового выхода. Часть интерес представляет 3 линии под/* Свяжите ряд данных по оси X */

/** 
* function to plot bar charts 
*/ 
function cg_graphs_plot_bar_graph($gdata, $gsettings){ 

    $graph_data = new pData(); 

    if(isset($gdata['bar_plots2'])){ //if this is set, its a duel bar graph 
    $graph_data->addPoints($gdata['bar_plots'],"surgeondata"); 
    $graph_data->addPoints(array(0,0,0,0),"surgeondatanull"); 
    $graph_data->addPoints($gdata['bar_plots2'],"everyonedata"); 
    $graph_data->addPoints(array(0,0,0,0),"everyonedatanull"); 
    $graph_data->setSerieDrawable(array("everyonedatanull"), FALSE); 
    $graph_data->setSerieDescription("surgeondata",$gdata['surgeonname']); 
    $graph_data->setSerieDescription("everyonedata","All Surgeons"); 
    $graph_data->setAxisUnit(0,"%"); 

    $surgeon = array("R"=>21,"G"=>0,"B"=>0); //surgeon series colour 
    $all = array("R"=>191,"G"=>160,"B"=>36); //everyone series colour 
    $graph_data->setPalette("surgeondata",$surgeon); 
    $graph_data->setPalette("everyonedata",$all); 
    $graph_data->setPalette("surgeondatanull",$surgeon); 
    $graph_data->setPalette("everyonedatanull",$all); 

    } else { 
    $graph_data->addPoints($gdata['bar_plots'],"percentiles"); 
    $graph_data->addPoints($gdata['surgeon_bar'],"surgeonbar"); 
    $graph_data->setSerieDrawable(array("surgeonbar"), FALSE); 
    } 
    $graph_data->setAxisName(0,$gsettings['axisYlabel']); 
    /* Bind a data serie to the X axis */ 
    $graph_data->addPoints($gdata['xaxis_names'],"Labels"); 
    $graph_data->setSerieDescription("Labels",$gsettings['axisXlabel']); 
    $graph_data->setAbscissa("Labels"); 

    $width=540; 
    $height=419; 

    $chart = new pImage($width,$height,$graph_data); 
    $chart->drawFromJPG(0,0,drupal_get_path('module', 'cg_graphs')."/images/graphbg.jpg"); 

    /* Write the picture title */ 
    $chart->setFontProperties(array("FontName"=>drupal_get_path('module', 'cg_graphs')."/pChart/fonts/ARIAL.TTF","FontSize"=>8)); 
    $chart->setFontProperties(array("R"=>0,"G"=>0,"B"=>0)); 
    $chart->drawText(270,70,$gsettings['title'],array("R"=>0,"G"=>0,"B"=>0,"Align"=>TEXT_ALIGN_MIDDLEMIDDLE, "FontSize" => 12)); 

    /* Set the graph area */ 
    $chart->setGraphArea(70,120,490,310); 

    /* Draw a rectangle */ 
    $chart->drawFilledRectangle(70,120,489,309,array("R"=>255,"G"=>255,"B"=>255,"Dash"=>FALSE, "BorderR"=>201,"BorderG"=>201,"BorderB"=>201)); 

    /* Turn on shadow computing */ 
    $chart->setShadow(TRUE,array("X"=>1,"Y"=>1,"R"=>0,"G"=>0,"B"=>0,"Alpha"=>20)); 

    $format = array(
     "DisplayValues"=>FALSE, 
     "DisplayColor"=>DISPLAY_AUTO, 
     "Rounded"=>FALSE, 
     "Gradient"=>TRUE, 
     "GradientAlpha"=>100, 
     "GradientMode"=>GRADIENT_EFFECT_CAN, 
     "GradientStartR"=>251, 
     "GradientStartG"=>220, 
     "GradientStartB"=>96, 
     "GradientEndR"=>191, 
     "GradientEndG"=>160, 
     "GradientEndtB"=>36 
    ); 

    if(isset($gdata['bar_plots2'])){ 
     /* Draw the scale */ 
     $chart->drawScale(array("XMargin"=>50, "Mode"=>SCALE_MODE_MANUAL, "ManualScale"=> $gsettings['maxmin'], "Pos" => SCALE_POS_LEFTRIGHT,'DrawXLines' => FALSE, 'GridTicks' => 500,'GridR'=>0,'GridG'=>0,'GridB'=>0, 'LabelRotation'=>0, 'AroundZero' => TRUE, 'Interleave' => 0.1)); 

     $graph_data->setSerieDrawable(array("surgeondata"), FALSE); 
     $graph_data->setSerieDrawable(array("surgeondatanull"), TRUE); 
    } else { 
    /* Draw the scale*/ 
    $chart->drawScale(array("XMargin"=>40, "Mode"=>SCALE_MODE_MANUAL, "ManualScale"=> $gsettings['maxmin'], "Pos" => SCALE_POS_LEFTRIGHT,'DrawXLines' => FALSE, 'GridTicks' => 500,'GridR'=>0,'GridG'=>0,'GridB'=>0, 'LabelRotation'=>0, 'AroundZero' => TRUE)); 
    } 

    $chart->drawBarChart($format); 

    //draw next bar with new colour. 
    $format = array(
     "DisplayValues"=>FALSE, 
     "DisplayColor"=>DISPLAY_AUTO, 
     "Rounded"=>FALSE, 
     "Gradient"=>TRUE, 
     "GradientAlpha"=>100, 
     "GradientMode"=>GRADIENT_EFFECT_CAN, 
     "GradientStartR"=>255, 
     "GradientStartG"=>230, 
     "GradientStartB"=>126, 
     "GradientEndR"=>21, 
     "GradientEndG"=>0, 
     "GradientEndtB"=>0 
); 

    if(!isset($gdata['bar_plots2'])){ //not set? we need to draw the second one. 
    //set draw series to false/true here 

    $graph_data->setSerieDrawable(array("percentiles"), FALSE); 
    $graph_data->setSerieDrawable(array("surgeonbar"), TRUE); 

    $chart->drawBarChart($format); 
    } else { 
    $graph_data->setSerieDrawable(array("surgeondatanull", "everyonedata"), FALSE); 
    $graph_data->setSerieDrawable(array("surgeondata", "everyonedatanull"), TRUE); 

    $chart->drawBarChart($format); 
    $graph_data->setSerieDrawable(array("everyonedatanull"), FALSE); 
    $graph_data->setSerieDrawable(array("everyonedata"), TRUE); 
    $chart->drawLegend(190,100,array("Style"=>LEGEND_NOBORDER, "Mode" => LEGEND_HORIZONTAL)); //draw legand 
    } 

    $imagename = str_replace(' ', '-', $gdata['surgeonname']); 
    $chart->render(drupal_get_path('module', 'cg_graphs')."/pChart/examples/pictures/".$imagename."-".$gsettings['name'].".png"); 
} 

А вот выход, я хочу, чтобы маркировать XAxis, в настоящее время метка не показывается. (Извините за удаленный заголовок и т.д., данные не в свободном доступе еще и имена необходимы удаление)

Current output

+0

Ваши метки на самом деле находятся в '$ gdata ['xaxis_names']'. Позаботьтесь, чтобы дать нам вывод 'print_r()' на этом? Похоже, что это должно быть 'Array (" 0 "," 1 "," 2 ","> 2 ")'. – BLaZuRE

+0

да, они есть, и все работает отлично. если вы посмотрите на результат, они маркируют столбцы, как должны. Проблема заключается в отсутствии метки Xaxis, а не меток данных. Как и в оси Y, «Процент Ops – tobynew

+0

просто примечание, отредактированное выше, так как я слишком быстро вернусь назад – tobynew

ответ

0

документация pChart беспорядок. Я обнаружил ошибку или два, где документация отличается от исходного кода. Их схема именования также нуждается в работе. Это неинтересно никому, кроме создателя.

Я считаю, что вы пытаетесь добавить метку к оси X. Для этого вам необходимо использовать setXAxisName().

«Температура», которая отображается в коде setSerieDescription(), представляет собой строку, которая используется для привязки этого набора данных к этому имени. На самом деле это не метка, которая отображается на диаграмме (это одно и то же имя). Это имя снова используется в setAbscissa().

+1

. Кажется, я не получаю имя setXaxis, работающий эфир, изменяя этот раздел кода на /* Привязать строку данных к оси X */ $ graph_data-> addPoints ($ GData [ 'xaxis_names'], "Этикетка"); $ graph_data-> setSerieDescription ("Ярлыки", $ gsettings ['axisXlabel']); $ graph_data-> setAbscissa ("Ярлыки"); $ graph_data-> setXAxisName ($ gsettings ['axisXlabel']); все еще имеет тот же результат. то есть ничего не отображается – tobynew

3

Вы должны использовать функцию setAbscissaName, как определено в http://wiki.pchart.net/doc.dataset.setabscissaname.html

Пример:

$MyData->setAbscissaName("Months");

Это будет отображать Months по оси Х под клещами.

+0

Это сработало для меня, хотя многие из примеров в документах опускают этот вызов в примере кода и все же отображают примеры изображений, содержащих метку/имя. – ekerner

Смежные вопросы