diff --git a/erpnext/accounts/doctype/asset/asset.js b/erpnext/accounts/doctype/asset/asset.js
index 7c4eeae..e3afc35 100644
--- a/erpnext/accounts/doctype/asset/asset.js
+++ b/erpnext/accounts/doctype/asset/asset.js
@@ -55,13 +55,13 @@
 				});
 			}
 
-			frm.trigger("show_graph");
+			frm.trigger("setup_chart");
 		}
 	},
 
-	show_graph: function(frm) {
-		var x_intervals = ["x", frm.doc.purchase_date];
-		var asset_values = ["Asset Value", frm.doc.gross_purchase_amount];
+	setup_chart: function(frm) {
+		var x_intervals = [frm.doc.purchase_date];
+		var asset_values = [frm.doc.gross_purchase_amount];
 		var last_depreciation_date = frm.doc.purchase_date;
 
 		if(frm.doc.opening_accumulated_depreciation) {
@@ -94,32 +94,21 @@
 			last_depreciation_date = frm.doc.disposal_date;
 		}
 
-		frm.dashboard.setup_chart({
+		frm.dashboard.render_graph({
+			title: "Asset Value",
 			data: {
-				x: 'x',
-				columns: [x_intervals, asset_values],
-				regions: {
-					'Asset Value': [{'start': last_depreciation_date, 'style':'dashed'}]
-				}
+				labels: x_intervals,
+				datasets: [{
+					color: 'green',
+					values: asset_values,
+					formatted: asset_values.map(d => d.toFixed(2))
+				}]
 			},
-			legend: {
-				show: false
-			},
-			axis: {
-				x: {
-					type: 'timeseries',
-					tick: {
-						format: "%d-%m-%Y"
-					}
-				},
-				y: {
-					min: 0,
-					padding: {bottom: 10}
-				}
-			}
+			type: 'line'
 		});
 	},
 
+
 	item_code: function(frm) {
 		if(frm.doc.item_code) {
 			frappe.call({
diff --git a/erpnext/accounts/report/accounts_receivable/accounts_receivable.py b/erpnext/accounts/report/accounts_receivable/accounts_receivable.py
index 9906893..56db392 100644
--- a/erpnext/accounts/report/accounts_receivable/accounts_receivable.py
+++ b/erpnext/accounts/report/accounts_receivable/accounts_receivable.py
@@ -44,7 +44,7 @@
 			})
 
 		columns += [_("Age (Days)") + ":Int:80"]
-		
+
 		self.ageing_col_idx_start = len(columns)
 
 		if not "range1" in self.filters:
@@ -53,7 +53,7 @@
 			self.filters["range2"] = "60"
 		if not "range3" in self.filters:
 			self.filters["range3"] = "90"
-			
+
 		for label in ("0-{range1}".format(range1=self.filters["range1"]),
 			"{range1}-{range2}".format(range1=cint(self.filters["range1"])+ 1, range2=self.filters["range2"]),
 			"{range2}-{range3}".format(range2=cint(self.filters["range2"])+ 1, range3=self.filters["range3"]),
@@ -74,14 +74,14 @@
 		})
 		if args.get("party_type") == "Customer":
 			columns += [
-				_("Territory") + ":Link/Territory:80", 
+				_("Territory") + ":Link/Territory:80",
 				_("Customer Group") + ":Link/Customer Group:120"
 			]
 		if args.get("party_type") == "Supplier":
 			columns += [_("Supplier Type") + ":Link/Supplier Type:80"]
-			
+
 		columns.append(_("Remarks") + "::200")
-		
+
 		return columns
 
 	def get_data(self, party_naming_by, args):
@@ -97,13 +97,13 @@
 			self.filters["company"] = frappe.db.get_single_value('Global Defaults', 'default_company')
 
 		company_currency = frappe.db.get_value("Company", self.filters.get("company"), "default_currency")
-		
+
 		return_entries = self.get_return_entries(args.get("party_type"))
 
 		data = []
 		for gle in self.get_entries_till(self.filters.report_date, args.get("party_type")):
 			if self.is_receivable_or_payable(gle, dr_or_cr, future_vouchers):
-				outstanding_amount, credit_note_amount = self.get_outstanding_amount(gle, 
+				outstanding_amount, credit_note_amount = self.get_outstanding_amount(gle,
 					self.filters.report_date, dr_or_cr, return_entries, currency_precision)
 				if abs(outstanding_amount) > 0.1/10**currency_precision:
 					row = [gle.posting_date, gle.party]
@@ -179,15 +179,15 @@
 			# entries adjusted with future vouchers
 			((gle.against_voucher_type, gle.against_voucher) in future_vouchers)
 		)
-		
+
 	def get_return_entries(self, party_type):
 		doctype = "Sales Invoice" if party_type=="Customer" else "Purchase Invoice"
-		return [d.name for d in frappe.get_all(doctype, filters={"is_return": 1, "docstatus": 1})]	
+		return [d.name for d in frappe.get_all(doctype, filters={"is_return": 1, "docstatus": 1})]
 
 	def get_outstanding_amount(self, gle, report_date, dr_or_cr, return_entries, currency_precision):
 		payment_amount, credit_note_amount = 0.0, 0.0
 		reverse_dr_or_cr = "credit" if dr_or_cr=="debit" else "debit"
-		
+
 		for e in self.get_gl_entries_for(gle.party, gle.party_type, gle.voucher_type, gle.voucher_no):
 			if getdate(e.posting_date) <= report_date and e.name!=gle.name:
 				amount = flt(e.get(reverse_dr_or_cr)) - flt(e.get(dr_or_cr))
@@ -195,11 +195,11 @@
 					payment_amount += amount
 				else:
 					credit_note_amount += amount
-					
+
 		outstanding_amount = flt((flt(gle.get(dr_or_cr)) - flt(gle.get(reverse_dr_or_cr)) \
 			- payment_amount - credit_note_amount), currency_precision)
 		credit_note_amount = flt(credit_note_amount, currency_precision)
-		
+
 		return outstanding_amount, credit_note_amount
 
 	def get_party_name(self, party_type, party_name):
@@ -207,7 +207,7 @@
 
 	def get_territory(self, party_name):
 		return self.get_party_map("Customer").get(party_name, {}).get("territory") or ""
-		
+
 	def get_customer_group(self, party_name):
 		return self.get_party_map("Customer").get(party_name, {}).get("customer_group") or ""
 
@@ -220,7 +220,7 @@
 				select_fields = "name, customer_name, territory, customer_group"
 			elif party_type == "Supplier":
 				select_fields = "name, supplier_name, supplier_type"
-			
+
 			self.party_map = dict(((r.name, r) for r in frappe.db.sql("select {0} from `tab{1}`"
 				.format(select_fields, party_type), as_dict=True)))
 
@@ -250,8 +250,8 @@
 			else:
 				select_fields = "sum(debit) as debit, sum(credit) as credit"
 
-			self.gl_entries = frappe.db.sql("""select name, posting_date, account, party_type, party, 
-				voucher_type, voucher_no, against_voucher_type, against_voucher, 
+			self.gl_entries = frappe.db.sql("""select name, posting_date, account, party_type, party,
+				voucher_type, voucher_no, against_voucher_type, against_voucher,
 				account_currency, remarks, {0}
 				from `tabGL Entry`
 				where docstatus < 2 and party_type=%s and (party is not null and party != '') {1}
@@ -277,13 +277,13 @@
 
 		if party_type_field=="customer":
 			if self.filters.get("customer_group"):
-				lft, rgt = frappe.db.get_value("Customer Group", 
+				lft, rgt = frappe.db.get_value("Customer Group",
 					self.filters.get("customer_group"), ["lft", "rgt"])
-			
-				conditions.append("""party in (select name from tabCustomer 
-					where exists(select name from `tabCustomer Group` where lft >= {0} and rgt <= {1} 
+
+				conditions.append("""party in (select name from tabCustomer
+					where exists(select name from `tabCustomer Group` where lft >= {0} and rgt <= {1}
 						and name=tabCustomer.customer_group))""".format(lft, rgt))
-						
+
 			if self.filters.get("credit_days_based_on"):
 				conditions.append("party in (select name from tabCustomer where credit_days_based_on=%s)")
 				values.append(self.filters.get("credit_days_based_on"))
@@ -303,22 +303,22 @@
 		return self.gl_entries_map.get(party, {})\
 			.get(against_voucher_type, {})\
 			.get(against_voucher, [])
-			
+
 	def get_chart_data(self, columns, data):
 		ageing_columns = columns[self.ageing_col_idx_start : self.ageing_col_idx_start+4]
-		
+
 		rows = []
 		for d in data:
 			rows.append(d[self.ageing_col_idx_start : self.ageing_col_idx_start+4])
 
 		if rows:
 			rows.insert(0, [[d.get("label")] for d in ageing_columns])
-		
+
 		return {
 			"data": {
-				'rows': rows
+				'labels': rows
 			},
-			"chart_type": 'pie'
+			"type": 'percentage'
 		}
 
 def execute(filters=None):
diff --git a/erpnext/accounts/report/balance_sheet/balance_sheet.py b/erpnext/accounts/report/balance_sheet/balance_sheet.py
index 2db4ef8..18b07ea 100644
--- a/erpnext/accounts/report/balance_sheet/balance_sheet.py
+++ b/erpnext/accounts/report/balance_sheet/balance_sheet.py
@@ -8,18 +8,18 @@
 from erpnext.accounts.report.financial_statements import (get_period_list, get_columns, get_data)
 
 def execute(filters=None):
-	period_list = get_period_list(filters.from_fiscal_year, filters.to_fiscal_year, 
+	period_list = get_period_list(filters.from_fiscal_year, filters.to_fiscal_year,
 		filters.periodicity, company=filters.company)
 
-	asset = get_data(filters.company, "Asset", "Debit", period_list, 
+	asset = get_data(filters.company, "Asset", "Debit", period_list,
 		only_current_fiscal_year=False, filters=filters,
 		accumulated_values=filters.accumulated_values)
-		
-	liability = get_data(filters.company, "Liability", "Credit", period_list, 
+
+	liability = get_data(filters.company, "Liability", "Credit", period_list,
 		only_current_fiscal_year=False, filters=filters,
 		accumulated_values=filters.accumulated_values)
-		
-	equity = get_data(filters.company, "Equity", "Credit", period_list, 
+
+	equity = get_data(filters.company, "Equity", "Credit", period_list,
 		only_current_fiscal_year=False, filters=filters,
 		accumulated_values=filters.accumulated_values)
 
@@ -43,17 +43,17 @@
 			unclosed[period.key] = opening_balance
 			if provisional_profit_loss:
 				provisional_profit_loss[period.key] = provisional_profit_loss[period.key] - opening_balance
-				
+
 		unclosed["total"]=opening_balance
 		data.append(unclosed)
-		
+
 	if provisional_profit_loss:
 		data.append(provisional_profit_loss)
 	if total_credit:
-		data.append(total_credit)		
+		data.append(total_credit)
 
 	columns = get_columns(filters.periodicity, period_list, filters.accumulated_values, company=filters.company)
-	
+
 	chart = get_chart_data(filters, columns, asset, liability, equity)
 
 	return columns, data, message, chart
@@ -87,7 +87,7 @@
 
 			total += flt(provisional_profit_loss[period.key])
 			provisional_profit_loss["total"] = total
-			
+
 			total_row_total += flt(total_row[period.key])
 			total_row["total"] = total_row_total
 
@@ -98,7 +98,7 @@
 				"warn_if_negative": True,
 				"currency": currency
 			})
-			
+
 	return provisional_profit_loss, total_row
 
 def check_opening_balance(asset, liability, equity):
@@ -111,17 +111,17 @@
 		opening_balance -= flt(liability[0].get("opening_balance", 0), float_precision)
 	if equity:
 		opening_balance -= flt(equity[0].get("opening_balance", 0), float_precision)
-		
+
 	opening_balance = flt(opening_balance, float_precision)
 	if opening_balance:
 		return _("Previous Financial Year is not closed"),opening_balance
 	return None,None
-		
+
 def get_chart_data(filters, columns, asset, liability, equity):
-	x_intervals = ['x'] + [d.get("label") for d in columns[2:]]
-	
+	labels = [d.get("label") for d in columns[2:]]
+
 	asset_data, liability_data, equity_data = [], [], []
-	
+
 	for p in columns[2:]:
 		if asset:
 			asset_data.append(asset[-2].get(p.get("fieldname")))
@@ -129,23 +129,25 @@
 			liability_data.append(liability[-2].get(p.get("fieldname")))
 		if equity:
 			equity_data.append(equity[-2].get(p.get("fieldname")))
-		
-	columns = [x_intervals]
+
+	datasets = []
 	if asset_data:
-		columns.append(["Assets"] + asset_data)
+		datasets.append({'title':'Assets', 'values': asset_data})
 	if liability_data:
-		columns.append(["Liabilities"] + liability_data)
+		datasets.append({'title':'Liabilities', 'values': liability_data})
 	if equity_data:
-		columns.append(["Equity"] + equity_data)
+		datasets.append({'title':'Equity', 'values': equity_data})
 
 	chart = {
 		"data": {
-			'x': 'x',
-			'columns': columns
+			'labels': labels,
+			'datasets': datasets
 		}
 	}
 
 	if not filters.accumulated_values:
-		chart["chart_type"] = "bar"
+		chart["type"] = "bar"
+	else:
+		chart["type"] = "line"
 
 	return chart
\ No newline at end of file
diff --git a/erpnext/accounts/report/profit_and_loss_statement/profit_and_loss_statement.py b/erpnext/accounts/report/profit_and_loss_statement/profit_and_loss_statement.py
index 6729d67..89ee63a 100644
--- a/erpnext/accounts/report/profit_and_loss_statement/profit_and_loss_statement.py
+++ b/erpnext/accounts/report/profit_and_loss_statement/profit_and_loss_statement.py
@@ -8,15 +8,15 @@
 from erpnext.accounts.report.financial_statements import (get_period_list, get_columns, get_data)
 
 def execute(filters=None):
-	period_list = get_period_list(filters.from_fiscal_year, filters.to_fiscal_year, 
+	period_list = get_period_list(filters.from_fiscal_year, filters.to_fiscal_year,
 		filters.periodicity, filters.accumulated_values, filters.company)
 
 	income = get_data(filters.company, "Income", "Credit", period_list, filters = filters,
-		accumulated_values=filters.accumulated_values, 
+		accumulated_values=filters.accumulated_values,
 		ignore_closing_entries=True, ignore_accumulated_values_for_fy= True)
-		
+
 	expense = get_data(filters.company, "Expense", "Debit", period_list, filters=filters,
-		accumulated_values=filters.accumulated_values, 
+		accumulated_values=filters.accumulated_values,
 		ignore_closing_entries=True, ignore_accumulated_values_for_fy= True)
 
 	net_profit_loss = get_net_profit_loss(income, expense, period_list, filters.company)
@@ -61,7 +61,7 @@
 
 
 def get_chart_data(filters, columns, income, expense, net_profit_loss):
-	x_intervals = ['x'] + [d.get("label") for d in columns[2:]]
+	labels = [d.get("label") for d in columns[2:]]
 
 	income_data, expense_data, net_profit = [], [], []
 
@@ -73,27 +73,24 @@
 		if net_profit_loss:
 			net_profit.append(net_profit_loss.get(p.get("fieldname")))
 
-	columns = [x_intervals]
+	datasets = []
 	if income_data:
-		columns.append(["Income"] + income_data)
+		datasets.append({'title': 'Income', 'values': income_data})
 	if expense_data:
-		columns.append(["Expense"] + expense_data)
+		datasets.append({'title': 'Expense', 'values': expense_data})
 	if net_profit:
-		columns.append(["Net Profit/Loss"] + net_profit)
+		datasets.append({'title': 'Net Profit/Loss', 'values': net_profit})
 
 	chart = {
 		"data": {
-			'x': 'x',
-			'columns': columns,
-			'colors': {
-				'Income': '#5E64FF',
-				'Expense': '#b8c2cc',
-				'Net Profit/Loss': '#ff5858'
-			}
+			'labels': labels,
+			'datasets': datasets
 		}
 	}
 
 	if not filters.accumulated_values:
-		chart["chart_type"] = "bar"
+		chart["type"] = "bar"
+	else:
+		chart["type"] = "line"
 
 	return chart
\ No newline at end of file
diff --git a/erpnext/crm/report/minutes_to_first_response_for_opportunity/minutes_to_first_response_for_opportunity.js b/erpnext/crm/report/minutes_to_first_response_for_opportunity/minutes_to_first_response_for_opportunity.js
index d9c4c8b..cdfdad1 100644
--- a/erpnext/crm/report/minutes_to_first_response_for_opportunity/minutes_to_first_response_for_opportunity.js
+++ b/erpnext/crm/report/minutes_to_first_response_for_opportunity/minutes_to_first_response_for_opportunity.js
@@ -21,23 +21,13 @@
 	get_chart_data: function (columns, result) {
 		return {
 			data: {
-				x: 'Date',
-				columns: [
-					['Date'].concat($.map(result, function (d) { return d[0]; })),
-					['Mins to first response'].concat($.map(result, function (d) { return d[1]; }))
-				]
-				// rows: [['Date', 'Mins to first response']].concat(result)
+				labels: result.map(d => d[0]),
+				datasets: [{
+					title: 'Mins to first response',
+					values: result.map(d => d[1])
+				}]
 			},
-			axis: {
-				x: {
-					type: 'timeseries',
-					tick: {
-						format: frappe.ui.py_date_format
-					}
-				}
-			},
-			chart_type: 'line',
-
+			type: 'line',
 		}
 	}
 }
diff --git a/erpnext/hr/report/vehicle_expenses/vehicle_expenses.py b/erpnext/hr/report/vehicle_expenses/vehicle_expenses.py
index 63e5f3c..93ea11c 100644
--- a/erpnext/hr/report/vehicle_expenses/vehicle_expenses.py
+++ b/erpnext/hr/report/vehicle_expenses/vehicle_expenses.py
@@ -29,26 +29,26 @@
 
 def get_log_data(filters):
 	fy = frappe.db.get_value('Fiscal Year', filters.get('fiscal_year'), ['year_start_date', 'year_end_date'], as_dict=True)
-	data = frappe.db.sql("""select 
+	data = frappe.db.sql("""select
 			vhcl.license_plate as "License", vhcl.make as "Make", vhcl.model as "Model",
-			vhcl.location as "Location", log.name as "Log", log.odometer as "Odometer", 
+			vhcl.location as "Location", log.name as "Log", log.odometer as "Odometer",
 			log.date as "Date", log.fuel_qty as "Fuel Qty", log.price as "Fuel Price"
-		from 
+		from
 			`tabVehicle` vhcl,`tabVehicle Log` log
-		where 
+		where
 			vhcl.license_plate = log.license_plate and log.docstatus = 1 and date between %s and %s
 		order by date""" ,(fy.year_start_date, fy.year_end_date), as_dict=1)
 	dl=list(data)
 	for row in dl:
 		row["Service Expense"]= get_service_expense(row["Log"])
 	return dl
-	
+
 def get_service_expense(logname):
-	expense_amount = frappe.db.sql("""select sum(expense_amount) 
-		from `tabVehicle Log` log,`tabVehicle Service` ser 
+	expense_amount = frappe.db.sql("""select sum(expense_amount)
+		from `tabVehicle Log` log,`tabVehicle Service` ser
 		where ser.parent=log.name and log.name=%s""",logname)
 	return flt(expense_amount[0][0]) if expense_amount else 0
-	
+
 def get_chart_data(data,period_list):
 	fuel_exp_data,service_exp_data,fueldata,servicedata = [],[],[],[]
 	service_exp_data = []
@@ -63,19 +63,25 @@
 		fueldata.append([period.key,total_fuel_exp])
 		servicedata.append([period.key,total_ser_exp])
 
-	x_intervals = ['x'] + [period.key for period in period_list]
+	labels = [period.key for period in period_list]
 	fuel_exp_data= [row[1] for row in fueldata]
 	service_exp_data= [row[1] for row in servicedata]
-	columns = [x_intervals]
+	datasets = []
 	if fuel_exp_data:
-		columns.append(["Fuel Expenses"]+ fuel_exp_data)
+		datasets.append({
+			'title': 'Fuel Expenses',
+			'values': fuel_exp_data
+		})
 	if service_exp_data:
-		columns.append(["Service Expenses"]+ service_exp_data)
+		datasets.append({
+			'title': 'Service Expenses',
+			'values': service_exp_data
+		})
 	chart = {
 		"data": {
-			'x': 'x',
-			'columns': columns
+			'labels': labels,
+			'datasets': datasets
 		}
 	}
-	chart["chart_type"] = "line"
+	chart["type"] = "line"
 	return chart
\ No newline at end of file
diff --git a/erpnext/manufacturing/page/production_analytics/production_analytics.js b/erpnext/manufacturing/page/production_analytics/production_analytics.js
index 1fb1ef2..39168b7 100644
--- a/erpnext/manufacturing/page/production_analytics/production_analytics.js
+++ b/erpnext/manufacturing/page/production_analytics/production_analytics.js
@@ -53,7 +53,7 @@
 
 		this.show_zero_check()
 		this.setup_chart_check();
-		
+
 	},
 	init_filter_values: function() {
 		this._super();
@@ -61,12 +61,13 @@
 	},
 	setup_chart: function() {
 		var me = this;
-		
+
 		var chart_data = this.get_chart_data ? this.get_chart_data() : null;
 
-		this.chart = new frappe.ui.Chart({
-			wrapper: this.chart_area,
-			data: chart_data
+		this.chart = new frappe.chart.FrappeChart({
+			parent: ".chart",
+			data: chart_data,
+			type: 'line'
 		});
 	},
 	set_default_values: function() {
@@ -95,7 +96,7 @@
 		var  pending = {name:"Pending", "id":"pending-pos",
 			checked:true};
 		var completed = {name:"Completed", "id":"completed-pos",
-			checked:true};	
+			checked:true};
 
 		$.each(frappe.report_dump.data["Production Order"], function(i, d) {
 			var dateobj = frappe.datetime.str_to_obj(d.creation);
@@ -109,10 +110,10 @@
 					var planned_start_date = frappe.datetime.user_to_obj(frappe.datetime.str_to_user(d.planned_start_date));
 					var aend_date = frappe.datetime.user_to_obj(frappe.datetime.str_to_user(d.actual_end_date));
 					var modified = frappe.datetime.user_to_obj(frappe.datetime.str_to_user(d.modified));
-					
+
 					if (dateobj <= start_period || dateobj <= end_period) {
 						all_open_orders[col.field] = flt(all_open_orders[col.field]) + 1;
-				
+
 						if(d.status=="Completed") {
 							if(aend_date < start_period || modified < start_period) {
 								completed[col.field] = flt(completed[col.field]) + 1;
@@ -140,7 +141,7 @@
 							}else{
 								not_started[col.field] = flt(not_started[col.field]) + 1;
 							}
-						}							
+						}
 					}
 				}
 			});
@@ -151,6 +152,6 @@
 			this.chart_area.toggle(false);
 		}
 		this.data = [all_open_orders, not_started, overdue, pending, completed];
-		
+
 	}
 });
diff --git a/erpnext/schools/report/course_wise_assessment_report/course_wise_assessment_report.py b/erpnext/schools/report/course_wise_assessment_report/course_wise_assessment_report.py
index 2b407c7..9bdf621 100644
--- a/erpnext/schools/report/course_wise_assessment_report/course_wise_assessment_report.py
+++ b/erpnext/schools/report/course_wise_assessment_report/course_wise_assessment_report.py
@@ -172,20 +172,19 @@
 
 def get_chart_data(grades, assessment_criteria_list, kounter):
 	grades = sorted(grades)
-	chart_data = []
-	chart_data.append(["x"] + assessment_criteria_list)
+	datasets = []
 	for grade in grades:
-		tmp = [grade]
+		tmp = []
 		for ac in assessment_criteria_list:
 			if grade in kounter[ac]:
 				tmp.append(kounter[ac][grade])
 			else:
 				tmp.append(0)
-		chart_data.append(tmp)
+		datasets.append(tmp)
 	return {
 		"data": {
-			"x": "x",
-			"columns": chart_data
+			"labels": assessment_criteria_list,
+			"datasets": datasets
 		},
-		"chart_type": 'bar',
+		"type": 'bar',
 	}
diff --git a/erpnext/support/report/minutes_to_first_response_for_issues/minutes_to_first_response_for_issues.js b/erpnext/support/report/minutes_to_first_response_for_issues/minutes_to_first_response_for_issues.js
index e84b13c..4cf07fa 100644
--- a/erpnext/support/report/minutes_to_first_response_for_issues/minutes_to_first_response_for_issues.js
+++ b/erpnext/support/report/minutes_to_first_response_for_issues/minutes_to_first_response_for_issues.js
@@ -18,23 +18,13 @@
 	get_chart_data: function(columns, result) {
 		return {
 			data: {
-				x: 'Date',
-				columns: [
-					['Date'].concat($.map(result, function(d) { return d[0]; })),
-					['Mins to first response'].concat($.map(result, function(d) { return d[1]; }))
-				]
-				// rows: [['Date', 'Mins to first response']].concat(result)
+				labels: result.map(d => d[0]),
+				datasets: [{
+					title: 'Mins to first response',
+					values: result.map(d => d[1])
+				}]
 			},
-			axis: {
-				x: {
-					type: 'timeseries',
-					tick: {
-						format: frappe.ui.py_date_format
-					}
-				}
-			},
-			chart_type: 'line',
-
+			type: 'line',
 		}
 	}
 }
diff --git a/erpnext/support/report/support_hour_distribution/support_hour_distribution.py b/erpnext/support/report/support_hour_distribution/support_hour_distribution.py
index e96b7b2..905ea6a 100644
--- a/erpnext/support/report/support_hour_distribution/support_hour_distribution.py
+++ b/erpnext/support/report/support_hour_distribution/support_hour_distribution.py
@@ -24,7 +24,7 @@
 
 	columns = get_columns()
 	data, timeslot_wise_count = get_data(filters)
-	chart = get_chartdata(timeslot_wise_count)
+	chart = get_chart_data(timeslot_wise_count)
 	return columns, data, None, chart
 
 def get_data(filters):
@@ -75,23 +75,21 @@
 
 	return columns
 
-def get_chartdata(timeslot_wise_count):
-	x_interval = ['x']
-	total_count = ['Total']
+def get_chart_data(timeslot_wise_count):
+	total_count = []
 	timeslots = ['12AM - 3AM', '3AM - 6AM', '6AM - 9AM',
 		'9AM - 12PM', '12PM - 3PM', '3PM - 6PM', '6PM - 9PM', '9PM - 12AM']
 
-	x_interval.extend(timeslots)
-	columns = [x_interval]
+	datasets = []
 	for data in timeslots:
 		total_count.append(timeslot_wise_count.get(data, 0))
-	columns.append(total_count)
+	datasets.append({'values': total_count})
 
 	chart = {
 		"data": {
-			'x': 'x',
-			'columns': columns
+			'labels': timeslots,
+			'datasets': datasets
 		}
 	}
-	chart["chart_type"] = "line"
+	chart["type"] = "line"
 	return chart
