Google Charts : How do I change the order of pie chart slices? - charts

How do I change the order of pie chart slices generation? Here is my code.
var DEFAULT_PIE_CHART_OPTIONS = {
theme: 'material',
titleTextStyle: { fontSize: 12 },
is3D: false,
pieSliceText: 'label',
colors: ['#8E142E','#C3CA21','#8A972B','#6FF522','#167D13'],
fontSize: 12,
pieHole: 0.6,
pieStartAngle: 180,
height: 600,
chartArea: { width: '100%', height: '100%', left: 0, top: 100 },
legend: { position: 'top', maxLines: 1, textStyle: { fontSize: 12, bold: true, italic: false } }
};
var chartOptions = DEFAULT_PIE_CHART_OPTIONS;
chartOptions.colors = null;
var chartOverallPmmLevelCalculated = new google.visualization.ChartWrapper({
'chartType': 'PieChart',
'containerId': 'chartOverallPmmLevelCalculatedHtml',
options: chartOptions
});
function drawPieChart() {
var responseDataTable = levelTableChart.getDataTable();
var chartDataTable = new google.visualization.DataTable();
chartDataTable.addColumn('string', 'Fiscal');
chartDataTable.addColumn('number', 'LEVEL');
var chartDataTableRow = new Array();
var rowCounter;
var levelValue;
for (rowCounter = 0; rowCounter < responseDataTable.getNumberOfRows() ; rowCounter++) {
var seek = 0 * 1;
levelValue = responseDataTable.getValue(rowCounter, 1);
if (levelValue !== null) {
chartDataTableRow[seek++] = "LEVEL " + levelValue.toString();
chartDataTableRow[seek++] = responseDataTable.getValue(rowCounter, 2);
} else {
chartDataTableRow[seek++] = null;
chartDataTableRow[seek++] = null;
}
chartDataTable.addRow(chartDataTableRow);
}
chartOverallPmmLevelCalculated.setDataTable(chartDataTable);
chartOverallPmmLevelCalculated.draw();
}
I attached the generated pie chart which generated with random LEVEL information. I just need to display LEVEL 0 to LEVEL 3 clockwise in the pie chart slices.

sort the DataTable before drawing the chart
// sort data - first column
data.sort([{column: 0}]);
see following working snippet...
google.charts.load('current', {
callback: function () {
var data = google.visualization.arrayToDataTable([
['Fiscal', 'LEVEL'],
['LEVEL 3', 30],
['LEVEL 1', 12],
['LEVEL 2', 42],
['LEVEL 0', 8],
]);
var chart = new google.visualization.ChartWrapper({
chartType: 'PieChart',
containerId: 'chart_div',
dataTable: data,
options: {
theme: 'material',
titleTextStyle: { fontSize: 12 },
is3D: false,
pieSliceText: 'label',
fontSize: 12,
pieHole: 0.6,
pieStartAngle: 180,
height: 600,
chartArea: { width: '100%', height: '100%', left: 0, top: 100 },
legend: { position: 'top', maxLines: 1, textStyle: { fontSize: 12, bold: true, italic: false } }
}
});
// sort data - first column
data.sort([{column: 0}]);
chart.draw();
},
packages:['corechart']
});
<script src="https://www.gstatic.com/charts/loader.js"></script>
<div id="chart_div"></div>

Related

how do I get my lables to show up in ChartJS?

I'm trying to bring my label content to the top and change the label flow color by column, but i still can't find a way, can you suggest or suggest me some ways.
this is my:
desired output
this is my code: I'm trying to custom lange but it's not working as i thought.
var ctx = document.getElementById("myChart").getContext('2d');
Chart.defaults.font.size = 16;
const labels = ["Cat", "Dog", "Monkey"];
const data = [89, 52, 70];
const barBgColor = ['#A0C8BB', '#B0C3E6', '#FFE38B', ]
var chartOptions = {
borderSkipped: false,
plugins: {
legend: {
display: false,
},
datalabels: {
display: true,
color: 'black',
anchor: 'end',
align: 'top',
offset: -30,
formatter: function(value, context) {
return value + '%';
}
}
},
barThickness: 55,
responsive: true,
scales: {
x: {
display: true,
title: {
font: {
size: 16,
},
display: true,
text: "",
},
grid: {
display: false,
drawBorder: false,
},
ticks: {
display: true,
beginAtZero: true,
},
},
y: {
display: true,
ticks: {
display: false,
beginAtZero: true,
stepSize: 30,
},
grid: {
color: '#9B9898',
drawBorder: false,
borderDash: [8, 4],
},
},
},
};
var myChart = new Chart(ctx, {
type: 'bar',
plugins: [ChartDataLabels],
data: {
labels,
datasets: [{
data: data,
backgroundColor: barBgColor,
}],
},
options: chartOptions,
});
<canvas id="myChart"></canvas>

Google Charts Y-axes on both sides need to uses the same lines

Thanks in Advance...!
Query: I want to display my graph where Y-axes on both sides need to use the same lines and add the 7 days interval in the h-axis.
My code is
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">
var report_colors = ["red","yellow","green"];
var report_columns = [
{"label":"Date","type":"string","name":"X"},
{"label":"b","type":"number","name":"b"},
{"label":"d","type":"number","name":"d"},
{"label":"d\/b","type":"number","name":"d\/b"}
];
var list = {"Sep 13, 2021":{"b":0,"b_percent":0,"d":6,"d_percnt":1.79,"bd":0,"bd_percnt":0},"Sep 14, 2021":{"b":0,"b_percent":0,"d":2,"d_percnt":0.6,"bd":0,"bd_percnt":0},"Sep 15, 2021":{"b":0,"b_percent":0,"d":12,"d_percnt":3.57,"bd":0,"bd_percnt":0},"Sep 16, 2021":{"b":0,"b_percent":0,"d":20,"d_percnt":5.95,"bd":0,"bd_percnt":0},"Sep 17, 2021":{"b":0,"b_percent":0,"d":16,"d_percnt":4.76,"bd":0,"bd_percnt":0},"Sep 20, 2021":{"b":5,"b_percent":0.84,"d":7,"d_percnt":2.08,"bd":100,"bd_percnt":100},"Sep 21, 2021":{"b":0,"b_percent":0,"d":43,"d_percnt":12.8,"bd":0,"bd_percnt":0},"Sep 22, 2021":{"b":1,"b_percent":0.17,"d":24,"d_percnt":7.14,"bd":100,"bd_percnt":100},"Sep 23, 2021":{"b":1,"b_percent":0.17,"d":30,"d_percnt":8.93,"bd":100,"bd_percnt":100},"Sep 24, 2021":{"b":9,"b_percent":1.52,"d":19,"d_percnt":5.65,"bd":100,"bd_percnt":100},"Sep 30, 2021":{"b":4,"b_percent":0.67,"d":0,"d_percnt":0,"bd":0,"bd_percnt":0},"Oct 01, 2021":{"b":30,"b_percent":5.05,"d":1,"d_percnt":0.3,"bd":3.33,"bd_percnt":3.33},"Oct 04, 2021":{"b":109,"b_percent":18.35,"d":6,"d_percnt":1.79,"bd":5.5,"bd_percnt":5.5},"Oct 05, 2021":{"b":41,"b_percent":6.9,"d":2,"d_percnt":0.6,"bd":4.88,"bd_percnt":4.88},"Oct 06, 2021":{"b":0,"b_percent":0,"d":5,"d_percnt":1.49,"bd":0,"bd_percnt":0},"Oct 07, 2021":{"b":0,"b_percent":0,"d":1,"d_percnt":0.3,"bd":0,"bd_percnt":0},"Oct 08, 2021":{"b":0,"b_percent":0,"d":4,"d_percnt":1.19,"bd":0,"bd_percnt":0},"Oct 10, 2021":{"b":0,"b_percent":0,"d":4,"d_percnt":1.19,"bd":0,"bd_percnt":0},"Oct 11, 2021":{"b":0,"b_percent":0,"d":19,"d_percnt":5.65,"bd":0,"bd_percnt":0},"Oct 12, 2021":{"b":0,"b_percent":0,"d":7,"d_percnt":2.08,"bd":0,"bd_percnt":0},"Oct 18, 2021":{"b":0,"b_percent":0,"d":1,"d_percnt":0.3,"bd":0,"bd_percnt":0},"Oct 19, 2021":{"b":3,"b_percent":0.51,"d":13,"d_percnt":3.87,"bd":100,"bd_percnt":100},"Oct 21, 2021":{"b":1,"b_percent":0.17,"d":1,"d_percnt":0.3,"bd":100,"bd_percnt":100},"Oct 23, 2021":{"b":4,"b_percent":0.67,"d":0,"d_percnt":0,"bd":0,"bd_percnt":0},"Oct 25, 2021":{"b":0,"b_percent":0,"d":8,"d_percnt":2.38,"bd":0,"bd_percnt":0},"Oct 26, 2021":{"b":1,"b_percent":0.17,"d":1,"d_percnt":0.3,"bd":100,"bd_percnt":100},"Oct 27, 2021":{"b":8,"b_percent":1.35,"d":6,"d_percnt":1.79,"bd":75,"bd_percnt":75},"Oct 28, 2021":{"b":3,"b_percent":0.51,"d":0,"d_percnt":0,"bd":0,"bd_percnt":0},"Nov 01, 2021":{"b":2,"b_percent":0.34,"d":1,"d_percnt":0.3,"bd":50,"bd_percnt":50},"Nov 02, 2021":{"b":7,"b_percent":1.18,"d":0,"d_percnt":0,"bd":0,"bd_percnt":0},"Nov 10, 2021":{"b":0,"b_percent":0,"d":3,"d_percnt":0.89,"bd":0,"bd_percnt":0},"Nov 11, 2021":{"b":0,"b_percent":0,"d":12,"d_percnt":3.57,"bd":0,"bd_percnt":0},"Nov 12, 2021":{"b":0,"b_percent":0,"d":1,"d_percnt":0.3,"bd":0,"bd_percnt":0},"Nov 14, 2021":{"b":0,"b_percent":0,"d":6,"d_percnt":1.79,"bd":0,"bd_percnt":0},"Nov 15, 2021":{"b":209,"b_percent":35.19,"d":14,"d_percnt":4.17,"bd":6.7,"bd_percnt":6.7},"Nov 16, 2021":{"b":20,"b_percent":3.37,"d":2,"d_percnt":0.6,"bd":10,"bd_percnt":10},"Nov 17, 2021":{"b":4,"b_percent":0.67,"d":31,"d_percnt":9.23,"bd":100,"bd_percnt":100},"Nov 19, 2021":{"b":0,"b_percent":0,"d":1,"d_percnt":0.3,"bd":0,"bd_percnt":0},"Nov 22, 2021":{"b":0,"b_percent":0,"d":1,"d_percnt":0.3,"bd":0,"bd_percnt":0},"Nov 23, 2021":{"b":1,"b_percent":0.17,"d":5,"d_percnt":1.49,"bd":100,"bd_percnt":100},"Nov 25, 2021":{"b":127,"b_percent":21.38,"d":1,"d_percnt":0.3,"bd":0.79,"bd_percnt":0.79},"Nov 26, 2021":{"b":2,"b_percent":0.34,"d":0,"d_percnt":0,"bd":0,"bd_percnt":0},"Dec 15, 2021":{"b":1,"b_percent":0.17,"d":0,"d_percnt":0,"bd":0,"bd_percnt":0},"Jan 10, 2022":{"b":1,"b_percent":0.17,"d":0,"d_percnt":0,"bd":0,"bd_percnt":0}};
google.load("visualization", "1", {
packages: ["corechart"]
});
google.setOnLoadCallback(drawChart);
function drawChart() {
var dataArray = [report_columns];
// console.log(report_columns);
$.each(list, function (index, table) {
console.log(table);
dataArray.push([index, table.b ,table.d, table.bd ]);
});
console.log(dataArray);
var data = google.visualization.arrayToDataTable(dataArray);
var formatter = new google.visualization.NumberFormat({
fractionDigits: 2,
suffix: '%'
});
formatter.format(data, 3);
var seriesColors = report_colors;
var options = {
// This line makes the entire category's tooltip active.
focusTarget: 'category',
// Use an HTML tooltip.
tooltip: { isHtml: true },
strictFirstColumnType: true,
width: '100%',
height: '60%',
'legend': {
'position': 'none'
},
gridlines: {
color: 'none'
},
colors: seriesColors,
interpolateNulls: false,
seriesType: 'area',
pointSize: 5,
series: {
2: {
type: 'line',
targetAxisIndex:2
}
},
chartArea: {
left: 40,
right:40,
top: 20,
width: "100%"
},
vAxes: [{
format: 0,
}, {
format: "#'%'",
minValue: 0,
maxValue:100
}],
hAxis: {
format: 'dd/MM/yyyy HH:mm',
title: '',
textStyle: {
color: '#b1b8bf',
fontSize: 10,
fontName: 'Arial',
bold: false,
italic: false
},
titleTextStyle: {
color: '#b1b8bf',
fontSize: 10,
fontName: 'Arial',
bold: false,
italic: false
},
gridlines:{color:'#CEC7CB'},
minorGridlines:{color:'#FFFFFF'},
},
vAxis: {
format: "#'%'",
title: '',
textStyle: {
color: '#b1b8bf',
fontSize: 10,
bold: false,
italic: false
},
titleTextStyle: {
color: '#b1b8bf',
fontSize: 10,
bold: false,
italic: false
},
gridlines:{color:'#CEC7CB'},
minorGridlines:{color:'#FFFFFF'},
}
};
var chart = new google.visualization.AreaChart(document.getElementById("chart"));
chart.draw(data, options);
}
</script>
<div id="chart" style="width: 900px; height: 300px;"></div>

How can I display Low Values on outside of Donut Chart using Google Visualization?

When i create google donut chart by using the following html code
function drawChart() {
var data = google.visualization.arrayToDataTable([
['Task', 'Hours per Day'],
['Work', 50],
['Eat', 50],
['Commute', 5],
]);
var options = {
title: 'My Daily Activities',
pieHole: 0.63,
enableInteractivity: false,
chartArea: {left: 5, right: 5, top: 5, bottom: 5, width: "100%", height: "100%"},
tooltip: {trigger: 'none'},
sliceVisibilityThreshold: 0,
pieSliceBorderColor: "#FFBE33",
slices: {
0: {
color: '#FFBE33',
textStyle: {bold: false, fontSize: 12, color: 'white'}
},
1: {
color: 'blue',
textStyle: {bold: false, fontSize: 12, color: 'white'}
},
2: {
color: 'black',
textStyle: {bold: false, fontSize: 12, color: 'white'}
}
}
};
var chart = new google.visualization.PieChart(document.getElementById('donutchart'));
chart.draw(data, options);
}
it produce the output like this:
when i give <5 value ,it does not shows percentage value on donut chart. But when i give >5 value means it shows correctly.
how can i display the percentage value outside or inside the donut chart like this?

Google Charts: baseline not working with mirrorlog

I'm trying to create a chart using mirrorlog scale, and it seems to be ignoring the baseline; bars always start from 0.
function drawChart1() {
data = google.visualization.arrayToDataTable([
['', 'val', { role: 'style' }],
[' ', 0.6, 'red'],
]);
ops = {
height: 50,
hAxis: {
ticks: [0.1, 0.2, 0.3, 0.65, 1.0],
baseline: 0.3,
textPosition: 'out',
scaleType: 'mirrorLog',
},
chartArea: { height: '20%', backgroundColor: 'yellow', top: 3 },
fontSize: 8,
legend: { position: 'none' },
bar: { groupWidth: "15%" },
axes: {
y: {
0: { position: 'none' }
}
}
};
chart = new google.visualization.BarChart(document.getElementById('chart_div'));
chart.draw(data, ops);
}
jsfiddle

Remove padding in Google Bar Charts

I need a simple bar chart with only one percentage bar and labels. I'm trying to remove the padding between the bar and the total canvas with 'chartArea' but the result it's not the expected, anyone knows how i can do that?
<https://jsfiddle.net/rro74054/1/>
I set a 'tomato' background color to make the space more visible.
Thanks everyone.
Add this to your options...
bar: {
groupWidth: '100%'
},
Example...
google.load('visualization', '1', {packages: ['corechart']});
google.setOnLoadCallback(drawRightY);
function drawRightY() {
var data = google.visualization.arrayToDataTable([
['', 'name1', {type: 'string', role: 'annotation'}, 'name2', {type: 'string', role: 'annotation'}, 'name3', {type: 'string', role: 'annotation'}],
['', 50, '50', 100, '100', 150, '150']
]);
var options = {
width: 400,
height: 400,
bar: {
groupWidth: '100%'
},
chartArea: { width: '100%', height: '100%', backgroundColor: 'tomato'},
isStacked: 'percent',
annotations: {
alwaysOutside: false,
textStyle: {
fontSize: 10,
auraColor: 'none',
color: '#fff'
}
},
legend: 'none',
enableInteractivity: false,
hAxis: {
baseline: 0,
gridlines: { count: 0 }
}
};
var chart = new google.visualization.BarChart(document.getElementById('chart_div'));
chart.draw(data, options);
}
<script src="https://www.google.com/jsapi"></script>
<div id="chart_div"></div>