jQuery 根据输入进行的图形、图表自定义不起作用
jQuery graph, chart custmization as per the inputs is not working
你好,最近我尝试了 Morris Area Charts,它很好。但是很难理解那里的数据是如何获取的。
我看过文档https://morrisjs.github.io/morris.js/lines.html,&
我在这里制作示例图
var data = [
{ y: '2014', a: 50, b: 90},
{ y: '2015', a: 65, b: 75},
{ y: '2016', a: 50, b: 50},
{ y: '2017', a: 75, b: 60},
{ y: '2018', a: 80, b: 65},
{ y: '2019', a: 90, b: 70},
{ y: '2020', a: 100, b: 75},
{ y: '2021', a: 115, b: 75},
{ y: '2022', a: 120, b: 85},
{ y: '2023', a: 145, b: 85},
{ y: '2024', a: 160, b: 95}
],
config = {
data: data,
xkey: 'y',
ykeys: ['a', 'b'],
labels: ['Total Income', 'Total Outcome'],
fillOpacity: 0.6,
hideHover: 'auto',
behaveLikeLine: true,
resize: true,
pointFillColors:['#ffffff'],
pointStrokeColors: ['black'],
lineColors:['gray','red']
};
config.element = 'area-chart';
Morris.Area(config);
#area-chart{
min-height: 250px;
}
<head>
<meta charset=utf-8 />
<title>Morris.js Area Chart</title>
</head>
<body>
<h3 class="text-primary text-center">
Morris js charts
</h3>
<div class"row">
<div class="col-sm-12 text-center">
<label class="label label-success">Area Chart</label>
<div id="area-chart" ></div>
</div>
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/morris.js/0.5.1/morris.css">
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/raphael/2.1.0/raphael-min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/morris.js/0.5.1/morris.min.js"></script>
</div>
</body>
但是我现在有不同的要求。
我必须在 Y 轴上输入年份,在 x 轴上我必须在图表中显示以下数据。
Initial gain total_gain year
100 10 110 1
100 25 125 2
200 20 220 1
1200 180 1380 1
1200 720 1920 3
但我不知道如何在图表中实现它。如果有人能理解这是如何工作的,请帮助
函数getData
只是将原始数据转换为正确的格式,这样就不会与当前的morris-chart-configuration (xkey
, ykeys
)发生格式冲突.
虽然最有趣的部分是parseTime
和xLabelFormat
。通过设置 parseTime
false
你告诉这个库你不希望数据被转换成 Date
-objects。因此,您可以更好地控制如何将数据打印到 x 轴上。此外,您可以根据需要使用 xLabelFormat
实际打印数据。在此示例中,相应的回调函数会记住最后一个 currentYear
-Number,以便该数字可以增加下一个数字。
function getData(sets) {
var result = [];
sets.forEach(function(set) {
result.push({
y: set.year.toString(),
a: set.Initial,
b: set.Initial + set.gain
});
});
return result;
}
var data = getData([{
Initial: 100,
gain: 10,
year: 1
},
{
Initial: 100,
gain: 25,
year: 2
},
{
Initial: 200,
gain: 20,
year: 1
},
{
Initial: 1200,
gain: 180,
year: 1
},
{
Initial: 1200,
gain: 720,
year: 3
},
]),
config = {
data: data,
xkey: 'y',
parseTime: false,
xLabelFormat: function(y) {
this.currentYear = this.currentYear ? (+this.currentYear) + (+y.label) : y.label;
return this.currentYear;
},
ykeys: ['a', 'b'],
labels: ['Total Income', 'Total Outcome'],
fillOpacity: 0.6,
hideHover: 'auto',
behaveLikeLine: true,
resize: true,
pointFillColors: ['#ffffff'],
pointStrokeColors: ['black'],
lineColors: ['gray', 'red']
};
config.element = 'area-chart';
Morris.Area(config);
#area-chart{
min-height: 250px;
}
<head>
<meta charset=utf-8 />
<title>Morris.js Area Chart</title>
</head>
<body>
<h3 class="text-primary text-center">
Morris js charts
</h3>
<div class"row">
<div class="col-sm-12 text-center">
<label class="label label-success">Area Chart</label>
<div id="area-chart" ></div>
</div>
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/morris.js/0.5.1/morris.css">
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/raphael/2.1.0/raphael-min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/morris.js/0.5.1/morris.min.js"></script>
</div>
</body>
P.s。
我实际上已经创建了一个函数 (getData
) 以正确的格式构建 data
,这样它就不会与图表配置冲突。所以当你想改变图表配置时,你也必须改变 getData
。
我还提供了一个 fiddle 来展示您如何仍然可以利用调整大小事件来放大此莫里斯图。在此示例中,当您放大时,图表将分成两个图表。
你好,最近我尝试了 Morris Area Charts,它很好。但是很难理解那里的数据是如何获取的。
我看过文档https://morrisjs.github.io/morris.js/lines.html,& 我在这里制作示例图
var data = [
{ y: '2014', a: 50, b: 90},
{ y: '2015', a: 65, b: 75},
{ y: '2016', a: 50, b: 50},
{ y: '2017', a: 75, b: 60},
{ y: '2018', a: 80, b: 65},
{ y: '2019', a: 90, b: 70},
{ y: '2020', a: 100, b: 75},
{ y: '2021', a: 115, b: 75},
{ y: '2022', a: 120, b: 85},
{ y: '2023', a: 145, b: 85},
{ y: '2024', a: 160, b: 95}
],
config = {
data: data,
xkey: 'y',
ykeys: ['a', 'b'],
labels: ['Total Income', 'Total Outcome'],
fillOpacity: 0.6,
hideHover: 'auto',
behaveLikeLine: true,
resize: true,
pointFillColors:['#ffffff'],
pointStrokeColors: ['black'],
lineColors:['gray','red']
};
config.element = 'area-chart';
Morris.Area(config);
#area-chart{
min-height: 250px;
}
<head>
<meta charset=utf-8 />
<title>Morris.js Area Chart</title>
</head>
<body>
<h3 class="text-primary text-center">
Morris js charts
</h3>
<div class"row">
<div class="col-sm-12 text-center">
<label class="label label-success">Area Chart</label>
<div id="area-chart" ></div>
</div>
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/morris.js/0.5.1/morris.css">
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/raphael/2.1.0/raphael-min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/morris.js/0.5.1/morris.min.js"></script>
</div>
</body>
但是我现在有不同的要求。
我必须在 Y 轴上输入年份,在 x 轴上我必须在图表中显示以下数据。
Initial gain total_gain year
100 10 110 1
100 25 125 2
200 20 220 1
1200 180 1380 1
1200 720 1920 3
但我不知道如何在图表中实现它。如果有人能理解这是如何工作的,请帮助
函数getData
只是将原始数据转换为正确的格式,这样就不会与当前的morris-chart-configuration (xkey
, ykeys
)发生格式冲突.
虽然最有趣的部分是parseTime
和xLabelFormat
。通过设置 parseTime
false
你告诉这个库你不希望数据被转换成 Date
-objects。因此,您可以更好地控制如何将数据打印到 x 轴上。此外,您可以根据需要使用 xLabelFormat
实际打印数据。在此示例中,相应的回调函数会记住最后一个 currentYear
-Number,以便该数字可以增加下一个数字。
function getData(sets) {
var result = [];
sets.forEach(function(set) {
result.push({
y: set.year.toString(),
a: set.Initial,
b: set.Initial + set.gain
});
});
return result;
}
var data = getData([{
Initial: 100,
gain: 10,
year: 1
},
{
Initial: 100,
gain: 25,
year: 2
},
{
Initial: 200,
gain: 20,
year: 1
},
{
Initial: 1200,
gain: 180,
year: 1
},
{
Initial: 1200,
gain: 720,
year: 3
},
]),
config = {
data: data,
xkey: 'y',
parseTime: false,
xLabelFormat: function(y) {
this.currentYear = this.currentYear ? (+this.currentYear) + (+y.label) : y.label;
return this.currentYear;
},
ykeys: ['a', 'b'],
labels: ['Total Income', 'Total Outcome'],
fillOpacity: 0.6,
hideHover: 'auto',
behaveLikeLine: true,
resize: true,
pointFillColors: ['#ffffff'],
pointStrokeColors: ['black'],
lineColors: ['gray', 'red']
};
config.element = 'area-chart';
Morris.Area(config);
#area-chart{
min-height: 250px;
}
<head>
<meta charset=utf-8 />
<title>Morris.js Area Chart</title>
</head>
<body>
<h3 class="text-primary text-center">
Morris js charts
</h3>
<div class"row">
<div class="col-sm-12 text-center">
<label class="label label-success">Area Chart</label>
<div id="area-chart" ></div>
</div>
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/morris.js/0.5.1/morris.css">
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/raphael/2.1.0/raphael-min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/morris.js/0.5.1/morris.min.js"></script>
</div>
</body>
P.s。
我实际上已经创建了一个函数 (getData
) 以正确的格式构建 data
,这样它就不会与图表配置冲突。所以当你想改变图表配置时,你也必须改变 getData
。
我还提供了一个 fiddle 来展示您如何仍然可以利用调整大小事件来放大此莫里斯图。在此示例中,当您放大时,图表将分成两个图表。