It's possible to create good visualization graphs with Visualization API + Highcharts library but it seems overriding the chart options is not possible.
Highcharts API has tons of options such as (http://api.highcharts.com/highcharts#xAxis.tickInterval).
I want to set options for some charts not for all of them.
I created a views and visualize it. It's OK. I made some changes on highcharts.inc (modules/visualization/includes/plugins/highcharts.inc).
if (!empty($x_axis)) {
$highchart->xAxis = (object) array(
'categories' => $x_axis,
'tickInterval' => "10",
);
}
I added the 'tickInterval' => "10",
line and it's working... but it's working for all charts. I want to set this options for only some charts. Is there a way to do this by for example adding a if clause with the views name I wanted to set the options?
I tried to add a line to the file ( if ($view->name == 'myview') {
)
if ($view->name == 'myview') {
if (!empty($x_axis)) {
$highchart->xAxis = (object) array(
'categories' => $x_axis,
'tickInterval' => "1",
);
}
}
But it gives error as I expected: Undefined variable: view
Yes, here how could I made the highcharts.inc file understand the view variables or is there any other way to do this?
EDITED (the highcharts.inc is below ):
<?php
/**
* @file
* Library plugin for Visualization implementing support for Highcharts.
*/
class HighchartsHandler implements VisualizationHandlerInterface {
protected $addedJavascript = FALSE;
protected $available = FALSE;
/**
* Constructor for the Highcharts plugin.
*/
public function __construct() {
if (module_exists('libraries')) {
module_load_include('module', 'libraries', 'libraries');
$path = libraries_get_path('highcharts');
$this->available = is_dir('./' . $path);
}
}
/**
* Renders a chart using Highcharts.
*/
public function render($chart_id, $data, $options) {
// Chart options.
$highchart = new stdClass();
// Chart.
$highchart->chart = (object) array(
'plotBackgroundColor' => NULL,
'plotBorderWidth' => NULL,
'plotShadow' => FALSE,
);
// Set title.
$highchart->title = new stdClass();
$highchart->title->text = $options['title'];
$x_axis = array();
if (!empty($options['xAxis']['labelField'])) {
foreach ($data as $row) {
$x_axis[] = check_plain(strip_tags((string) $row[$options['xAxis']['labelField']]));
}
}
if (!empty($x_axis)) {
$highchart->xAxis = (object) array(
'categories' => $x_axis,
'tickInterval' => "10",
);
}
if ($view->name == 'myview') {
if (!empty($x_axis)) {
$highchart->xAxis = (object) array(
'categories' => $x_axis,
'tickInterval' => "1",
);
}
}
if (!empty($options['yAxis']['title'])) {
$highchart->yAxis = (object) array(
'title' => (object) array(
'text' => $options['yAxis']['title'],
),
'min' => "0",
);
}
// Series.
$highchart->series = array();
foreach ($options['fields'] as $name => $column) {
if (!empty($column['enabled'])) {
$serie = new stdClass();
$serie->name = $column['label'];
$serie->type = $options['type'];
$serie->data = array();
foreach ($data as $row) {
$value = (int) $row[$name];
if (!empty($column['enabled'])) {
$serie->data[] = (object) array('name' => check_plain(strip_tags($row[$options['xAxis']['labelField']])), 'y' => $value);
}
else {
$serie->data[] = $value;
}
}
$highchart->series[] = $serie;
}
}
$highchart->plotOptions = new stdClass();
$highchart->plotOptions->pie = (object) array(
'allowPointSelect' => TRUE,
'cursor' => 'pointer',
'dataLabels' => (object) array(
'enabled' => TRUE,
'format' => "<b>{point.name}</b>: % {point.percentage:.1f}"
),
'showInLegend' => TRUE,
);
$highchart->plotOptions->bar = (object) array(
'dataLabels' => (object) array(
'enabled' => TRUE,
),
);
$highchart->credits = new stdClass();
$highchart->credits->enabled = FALSE;
// Rendering.
$highchart->chart->renderTo = $chart_id;
$information = array(
'library' => 'highcharts',
'options' => $highchart,
);
// Add Drupal.settings for this chart.
drupal_add_js(array('visualization' => array($chart_id => $information)), array('type' => 'setting'));
}
/**
* Includes global Javascript required by Highcharts.
*/
public function postRender() {
if (!$this->addedJavascript) {
module_load_include('module', 'libraries', 'libraries');
$path = libraries_get_path('highcharts');
drupal_add_js($path . '/js/highcharts.js');
drupal_add_js(drupal_get_path('module', 'visualization') . '/js/highcharts.js', array('scope' => 'footer'));
$this->addedJavascript = TRUE;
}
}
/**
* Whether or not the plugin is avialable.
*/
public function available() {
return $this->available;
}
/**
* Returns an array with supported chart types.
*/
public function supportedTypes() {
return array('line', 'column', 'pie');
}
}
$plugin = array(
'name' => 'highcharts',
'label' => t('Highcharts'),
'handler' => new HighchartsHandler(),
);
$view
to be defined? If function is short enough, post it. If it's too long, tell us what you found about the issues you encountered, and maybe link to API page with it's whole code. Don't expect us to guess / look for places you changes and re-cerate it on our own for you...