This question already has an answer here:
Displaying Data on Google Chart Using SQL Database in MVC Application
(1 answer)
Closed 4 years ago.
I have an ASP.NET MVC 5 application that uses a SQL database to store data. I want to extract two datetime columns from this database, and I want to use these values instead of the hard coded date values in the view below to display the chart for the values stored in the database table.
View
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<div id="chart_div"></div>
<script type="text/javascript">
google.charts.load('current', { 'packages': ['timeline'] });
google.charts.setOnLoadCallback(drawChart);
function drawChart() {
var data = new google.visualization.DataTable({
cols: [
{ id: 'Session', label: 'Session', type: 'int' },
{ id: 'start', label: 'Season Start Date', type: 'date' },
{ id: 'end', label: 'Season End Date', type: 'date' }
],
rows: [
{ c: [{ v: 'Baltimore Ravens' }, { v: 'Date(2000, 8, 5)' }, { v: 'Date(2001, 1, 5)' }] },
{ c: [{ v: 'New England Patriots' }, { v: 'Date(2001, 8, 5)' }, { v: 'Date(2002, 1, 5)' }] },
{ c: [{ v: 'Tampa Bay Buccaneers' }, { v: 'Date(2002, 8, 5)' }, { v: 'Date(2003, 1, 5)' }] },
{ c: [{ v: 'New England Patriots' }, { v: 'Date(2003, 8, 5)' }, { v: 'Date(2004, 1, 5)' }] },
{ c: [{ v: 'New England Patriots' }, { v: 'Date(2004, 8, 5)' }, { v: 'Date(2005, 1, 5)' }] },
{ c: [{ v: 'Pittsburgh Steelers' }, { v: 'Date(2005, 8, 5)' }, { v: 'Date(2006, 1, 5)' }] },
{ c: [{ v: 'Indianapolis Colts' }, { v: 'Date(2006, 8, 5)' }, { v: 'Date(2007, 1, 5)' }] },
{ c: [{ v: 'New York Giants' }, { v: 'Date(2007, 8, 5)' }, { v: 'Date(2008, 1, 5)' }] },
{ c: [{ v: 'Pittsburgh Steelers' }, { v: 'Date(2008, 8, 5)' }, { v: 'Date(2009, 1, 5)' }] },
{ c: [{ v: 'New Orleans Saints' }, { v: 'Date(2009, 8, 5)' }, { v: 'Date(2010, 1, 5)' }] },
{ c: [{ v: 'Green Bay Packers' }, { v: 'Date(2010, 8, 5)' }, { v: 'Date(2011, 1, 5)' }] },
{ c: [{ v: 'New York Giants' }, { v: 'Date(2011, 8, 5)' }, { v: 'Date(2012, 1, 5)' }] },
{ c: [{ v: 'Baltimore Ravens' }, { v: 'Date(2012, 8, 5)' }, { v: 'Date(2013, 1, 5)' }] },
{ c: [{ v: 'Seattle Seahawks' }, { v: 'Date(2013, 8, 5)' }, { v: 'Date(2014, 1, 5)' }] }
]
});
var options = {
height: 450,
timeline: {
groupByRowLabel: true
}
};
var chart = new google.visualization.Timeline(document.getElementById('chart_div'));
chart.draw(data, options);
}
Related
I'm using Echarts with vue and I created a bar chart and I want to change the color of each bar in this chart. I tried the code below but it just changes the color of the first one.
optionYear: {
legend: {},
color: ["#14323F", "green", "red", "purple", "yellow", "black"], // tried this to change bar color
tooltip: {
trigger: "axis",
axisPointer: {
type: "shadow",
},
formatter: function (params) {
return params[0].data[1] + "%";
},
},
dataset: [
{
dimensions: ["name", "value"],
source: [[], [], [], [], [], []],
},
{
transform: {
type: "sort",
config: { dimension: "value", order: "desc" },
},
},
],
xAxis: {
type: "category",
axisLabel: { interval: 0, rotate: 30 },
},
yAxis: {},
series: {
type: "bar",
encode: { x: "name", y: "value" },
datasetIndex: 1,
},
},
To meet your requirement (set color to each x-axis), you should set itemStyle function in the option.series, here's the code:
option = {
series: {
// This is the key part
itemStyle: {
color: function (param) {
const color = ["#14323F", "green", "red", "purple", "yellow", "black"];
// param.value[0] is the x-axis value
return color[param.value[0] % color.length]
}
},
type: "bar",
encode: { x: "name", y: "value" },
datasetIndex: 1,
},
legend: {},
tooltip: {
trigger: "axis",
axisPointer: {
type: "shadow",
},
formatter: function (params) {
return params[0].data[1] + "%";
},
},
dataset: [
{
dimensions: ["name", "value"],
source: [[0, 10], [1, 20], [2, 30], [4, 40], [5, 50], [6, 60]],
},
{
transform: {
type: "sort",
config: { dimension: "value", order: "desc" },
},
},
],
xAxis: {
type: "category",
axisLabel: { interval: 0, rotate: 30 },
},
yAxis: {},
};
It will show like this, each bar of different x-axis will have a different color:
This option.color you set is for different series in the chart, for example, like a chart like this:
i'm trying to do a multiple axis / multiple grouped vega chart.
This is what I'm trying to achieve:
I want to be able to sort the data first into years: 2018, 2019 etc. Then I want it split into the " 0,1,2,3" categories and after that I want to see the data per each size "s,m,l" etc.
Basically, what I want to have is: How many tshirt of the size "M" from the "3rd batch" i had in 2019.
I hope i made it pretty clear.
I don't want stacked bars, but individual bars.
Also, I want the top axis to have different colors depending on the years.
I would appreciate any help possible.
This is what i have so far:
{
$schema: https://vega.github.io/schema/vega/v4.json
padding: {left: 5, top: 25, right: 5, bottom: 50}
data: [
{
name: source_0
values: [
{speedName: "A", connectionType: "s", speedCount: 0.1, speedValue: "2018"}
{speedName: "A", connectionType: "m", speedCount: 0.3, speedValue: "2018"}
{speedName: "A", connectionType: "l", speedCount: 0.5, speedValue: "2018"}
{speedName: "A", connectionType: "s", speedCount: 0.6, speedValue: "2019"}
{speedName: "A", connectionType: "m", speedCount: 0.3, speedValue: "2019"}
{speedName: "A", connectionType: "l", speedCount: 0.5, speedValue: "2019"}
{speedName: "A", connectionType: "l", speedCount: 0.9, speedValue: "2020"}
{speedName: "B", connectionType: "s", speedCount: 0.7, speedValue: "2019"}
{speedName: "B", connectionType: "m", speedCount: 0.2, speedValue: "2020"}
{speedName: "B", connectionType: "l", speedCount: 1.1, speedValue: "2018"}
{speedName: "C", connectionType: "s", speedCount: 0.6, speedValue: "2020"}
{speedName: "C", connectionType: "m", speedCount: 0.1, speedValue: "2018"}
{speedName: "C", connectionType: "l", speedCount: 0.2, speedValue: "2021"}
]
transform: [
{
type: collect
sort: {
field: ["connectionType", "speedName", "speedValue"]
order: ["ascending", "ascending", "ascending"]
}
}
{
type: collect
sort: {
field: ["connectionType", "speedValue", "speedNameSort"]
order: ["ascending", "ascending", "ascending"]
}
}
{type: "filter", expr: "datum.speedCount < 100"}
{
type: aggregate
groupby: ["speedValue", "speedName", "connectionType"]
ops: ["sum", "count"]
fields: ["speedCount", "speedValue"]
as: ["speedCount", "count"]
}
]
}
{
name: data_0
source: source_0
transform: [
{
type: aggregate
groupby: ["speedName", "connectionType", "speedValue"]
ops: ["sum"]
fields: ["speedCount"]
as: ["speedCount"]
}
{
type: filter
expr: (datum["speedCount"]) && isFinite(+datum["speedCount"])
}
]
}
{
name: column_domain
source: data_0
transform: [
{
type: aggregate
groupby: ["speedValue"]
}
]
}
]
signals: [
{name: "x_step", value: 30}
{
name: child_width
update: bandspace(domain('x').length, 0.1, 0.05) * x_step
}
{name: "child_height", value: 200}
]
layout: {
padding: 25
columns: {signal: "length(data('column_domain'))"}
bounds: full
align: all
}
marks: [
{
name: row_header
type: group
role: row-header
encode: {
update: {
height: {signal: "child_height"}
}
}
axes: [
{
orient: left
scale: y
domain: false
grid: false
labelOverlap: true
ticks: false
domain: false
labelPadding: 10
tickCount: {signal: "ceil(child_height/40)"}
offset: 2
tickCount: {signal: "ceil(child_height/40)"}
zindex: 0
labelColor: "#6c6c6c"
}
]
}
{
name: column_header
type: group
role: column-header
from: {data: "column_domain"}
sort: {field: "datum[\"speedValue\"]", order: "ascending"}
encode: {
update: {
width: {signal: "child_width"}
}
}
marks: [
{
name: rule
from: {data: "column_domain"}
type: rect
encode: {
enter: {
stroke: {scale: "colors", field: "speedValue"}
}
update: {
x: {signal: 0}
y: {signal: "-25"}
x2: {signal: "child_width"}
fill: {scale: "colors", field: "speedValue"}
strokeWidth: {signal: "2"}
}
}
}
{
type: text
from: {data: "column_domain"}
encode: {
update: {
x: {signal: "child_width/2", field: "speedValue"}
y: {signal: "-35"}
x2: {signal: "child_width"}
fill: {scale: "colors", field: "speedValue"}
fontSize: {signal: "child_width/10 + 5"}
align: {value: "center"}
text: {
signal: (parent["speedValue"]) ? parent["speedValue"] : ""+parent["speedValue"]
}
}
}
}
]
}
{
name: column_footer
type: group
role: column-footer
from: {
facet: {
name: facet
data: data_0
groupby: ["speedValue"]
}
}
sort: {field: "datum[\"speedValue\"]", order: "ascending"}
encode: {
update: {
width: {signal: "child_width"}
}
enter: {
x: {scale: "x", field: "speedName"}
}
}
axes: [
{
orient: bottom
scale: x
labelPadding: 25
labelAngle: 0
labelAlign: right
labelBaseline: middle
labelOverlap: true
ticks: false
speedValue: x
labelColor: "#6c6c6c"
grid: false
domainColor: "#6c6c6c"
domainWidth: 2.5
zindex: 0
}
]
marks: [
{
type: group
from: {
facet: {data: "facet", name: "facet", groupby: "speedName"}
}
encode: {
enter: {
x: {scale: "x", field: "speedName"}
}
}
scales: [
{
name: pos
type: band
range: width
domain: {data: "facet", field: "connectionType"}
}
]
axes: [
{
orient: bottom
scale: pos
labelAngle: 0
labelAlign: middle
labelBaseline: middle
labelOverlap: true
ticks: false
labelColor: "#6c6c6c"
grid: false
domainColor: "#6c6c6c"
domainWidth: 2.5
zindex: 0
offset: 10
}
]
}
]
}
{
name: cell
type: group
style: cell
from: {
facet: {
name: facet
data: data_0
groupby: ["speedValue"]
}
}
sort: {
field: ["datum[\"speedValue\"]"]
order: ["ascending"]
}
encode: {
update: {
width: {signal: "child_width"}
height: {signal: "child_height"}
}
}
marks: [
{
type: group
from: {
facet: {data: "facet", name: "facet", groupby: "speedName"}
}
encode: {
enter: {
x: {scale: "x", field: "speedName"}
}
}
scales: [
{
name: pos
type: band
range: width
domain: {data: "facet", field: "connectionType"}
}
]
axes: [
{
orient: bottom
scale: pos
tickSize: 3
labelPadding: 2
offset: 5
ticks: false
labels: false
}
]
marks: [
{
name: child_marks
type: rect
style: ["bar"]
from: {data: "facet"}
encode: {
update: {
fill: {scale: "color", field: "connectionType"}
ariaRoleDescription: {value: "bar"}
tooltip: {
signal: '''{"Speed Type": ''+datum["speedName"], "Speed": ''+datum["speedValue"], "Speed Count": datum['speedCount'], "Connection Type": ''+datum["connectionType"]}'''
}
x: {scale: "x", field: "connectionType"}
width: {scale: "x", band: 1}
y: {scale: "y", field: "speedCount"}
y2: {scale: "y", value: "0"}
}
}
}
]
}
]
}
]
scales: [
{
name: x
type: band
domain: {data: "data_0", field: "speedName"}
range: {
step: {signal: "x_step"}
}
paddingInner: 0.1
paddingOuter: 0.05
}
{
name: y
type: linear
domain: {data: "data_0", field: "speedCount"}
range: [
{signal: "child_height"}
0
]
nice: true
zero: true
}
{
name: color
type: ordinal
domain: {data: "source_0", field: "connectionType", sort: true}
range: [
"#e20074"
"#000000"
"#6c6c6c"
"#b3b3b3"
"#1063ad"
"#1bada2"
"#ea75b6"
]
}
{
name: colors
type: ordinal
domain: [2018, 2019, 2020, 2021, 2022]
range: ["#ff9a1e", "#bfcb44", "#1bada2", "#53baf2", "#1063ad"]
}
]
legends: [
{
fill: color
direction: vertical
padding: 10
encode: {
symbols: {
update: {
shape: {value: "square"}
}
}
}
}
]
}
And this is how it looks so far:
result so far
I am trying to merge arrays of objects into one clean array using Ramda but I need some help. I have sample JSON which is below. In this example, I have 2 groups but the number of groups can be 3, 4, 10. I am interested in tableItems array from each group.
const groups = [
{
id: '',
name: '',
tableItems: [
{
id: 1,
name: 'John'
},
{
id: 2,
name: 'Paul'
},
{
id: 3,
name: 'Mary'
}
]
},
{
id: '',
name: '',
tableItems: [
{
id: 10,
name: 'Brian'
},
{
id: 20,
name: 'Joseph'
},
{
id: 30,
name: 'Luke'
}
]
}
];
I tried something like this:
let mapValues = x => x.tableItems;
const testItems = R.pipe(
R.map(mapValues)
)
And then I got arrays of my tableItems and now I would like to merge them into one array.
[
[
{
"id": 1,
"name": "John"
},
{
"id": 2,
"name": "Paul"
},
{
"id": 3,
"name": "Mary"
}
],
[
{
"id": 10,
"name": "Brian"
},
{
"id": 20,
"name": "Joseph"
},
{
"id": 30,
"name": "Luke"
}
]
]
Any help would be appreciated.
Use R.chain to map and flatten, and get the tableItems using R.prop:
const fn = R.chain(R.prop('tableItems'));
const groups = [{"id":"","name":"","tableItems":[{"id":1,"name":"John"},{"id":2,"name":"Paul"},{"id":3,"name":"Mary"}]},{"id":"","name":"","tableItems":[{"id":10,"name":"Brian"},{"id":20,"name":"Joseph"},{"id":30,"name":"Luke"}]}];
const result = fn(groups);
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.27.0/ramda.js"></script>
I'm trying to disable delivery as explained in the documentation but it doesn't work.
Screen
Doc : https://developer.paypal.com/docs/api/orders/v2/#definition-order_application_context
createOrder: (data, actions) => {
return actions.order.create({
purchase_units: [
{
description: "global description",
items: [
{
name: "aaa",
quantity: 1,
unit_amount: { currency_code: "EUR", value: 10 }
},
{
name: "bbb",
quantity: 2,
unit_amount: { currency_code: "EUR", value: 10 }
}
],
amount: {
currency_code: "EUR",
value: 30,
breakdown: {
item_total: {
currency_code: "EUR",
value: 30
}
}
},
order_application_context: {
shipping_preference: "NO_SHIPPING"
}
}
]
});
Same issue with :
application_context: {
shipping_preference: "NO_SHIPPING"
}
You would have to put application_context outside of purchase_units like this
createOrder: (data, actions) => {
return actions.order.create({
purchase_units: [
{
description: "global description",
items: [
{
name: "aaa",
quantity: 1,
unit_amount: { currency_code: "EUR", value: 10 }
},
{
name: "bbb",
quantity: 2,
unit_amount: { currency_code: "EUR", value: 10 }
}
],
amount: {
currency_code: "EUR",
value: 30,
breakdown: {
item_total: {
currency_code: "EUR",
value: 30
}
}
},
}
],
application_context: {
shipping_preference: "NO_SHIPPING"
}
});
},
How to get metric from graphite data source?
I've got this script, but it's generate random metric from fake data source.
Image:
Where I can set graphite data source in this script
'use strict';
var window, document, ARGS, $, jQuery, moment, kbn;
var dashboard;
var ARGS;
dashboard = {
rows : [],
schemaVersion: 13,
};
dashboard.title = 'Scripted and templated dash';
dashboard.time = {
from: "now-6h",
to: "now"
};
var rows = 1;
var seriesName = 'argName';
if(!_.isUndefined(ARGS.name)) {
seriesName = ARGS.name;
}
dashboard.rows.push({
title: 'Chart',
height: '300px',
panels: [
{
title: 'Events',
type: 'graphite',
span: 12,
fill: 1,
linewidth: 2,
targets: [
{
'target': 'stats.gauges.WidgetOccurrences.places.300'
}
],
}
]
});
return dashboard;
Try with data source value.
// Intialize a skeleton with nothing but a rows array and service object
dashboard = {
__inputs: [{
'name': "DS",
'label': "datasource_label",
'description': "",
'type': "datasource",
'pluginId': "datasource_plugin_id",
'pluginName': "datasource_plugin_name"
}],
__requires: [{
'type': 'panel',
'id': 'graph',
'name': 'Graph',
'version': ''
},
{
'type': 'datasource',
'id': 'datasource_plugin_id',
'name': 'datasource_plugin_name',
'version': '1.0.0'
}
],
editable: true,
rows: [],
};
dashboard.title = 'Scripted';
dashboard.time = {
from: 'now-36h',
to: 'now'
};
dashboard.rows.push({
title: 'Chart',
height: '300px',
panels: [{
title: 'Variable Importance',
type: 'graph',
span: 12,
fill: 1,
linewidth: 2,
datasource: 'datasource_label',
targets: [{
"target": "target"
}],
seriesOverrides: [],
tooltip: {
shared: true,
sort: 0,
value_type: 'individual'
},
xaxis: {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": []
},
yaxes: [{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
}
]
}]
});
return dashboard;