2016-07-08 3 views
1

https://jsfiddle.net/43Tesseracts/qmhhc089/стиль точки отображения на легенде в chart.js

Для первого набора данных этого графика XPData, как установить стиль легенды использовать точку вместо строки?

Я надеюсь, что все, что мне нужно сделать, это добавить: showLines: false в соответствии с Scatter Line Chart docs, но я не могу понять, где поставить эту настройку.

Вот набор данных (см скрипку):

var XPData = { 
    label: 'XP Earned', 
    //fill: false, 
    //backgroundColor: "rgba(0,0,0,0)", 
    //borderColor: "rgba(0,0,0,0)", 
    pointBorderColor: "#444", 
    pointBackgroundColor: "#444", 
    data: [], 
    showLines: false, 
}; 

/*jshint esversion: 6 */ 
 

 
var ctx = document.getElementById("myChart"); 
 

 
class DataPoint { 
 
    constructor(x, y) { 
 
    this.x = x; 
 
    this.y = y; 
 
    } 
 
} 
 

 
var days = 85; 
 
var chillax = 72.5; 
 

 
// XP DATA SET 
 
var XPData = { 
 
    label: 'XP Earned', 
 
    //fill: false, 
 
    //backgroundColor: "rgba(0,0,0,0)", 
 
    //borderColor: "rgba(0,0,0,0)", 
 
    pointBorderColor: "#444", 
 
    pointBackgroundColor: "#444", 
 
    data: [], 
 
    showLines: false, 
 

 
    options: { 
 
    legend: { 
 
     labels: { 
 
     usePointStyle: true 
 
     } 
 
    } 
 
    }, 
 
}; 
 

 
// XP Data generation 
 
var total = 0; 
 
for (var i = 0; i < 35; i++) { 
 
    total += 10 * Math.floor(Math.random() + 0.5); 
 
    total += 5 * Math.floor(Math.random() + 0.5); 
 
    total += 5 * Math.floor(Math.random() + 0.5); 
 

 
    var p = new DataPoint(i + 1, total); 
 
    XPData.data.push(p); 
 
} 
 

 

 
// XP Trend Data  
 
var XPTrendData = { 
 
    label: 'XP Trend', 
 
    fill: false, 
 
    pointRadius: 0, 
 
    lineTension: 0, 
 
    borderDash: [5, 5], 
 
    borderColor: "#ccc", 
 
    backgroundColor: "rgba(0,0,0,0)", 
 
    data: [], 
 
}; 
 

 
// XP Trend calculaion 
 
var total = 0; 
 
var days_so_far = XPData.data.length; 
 
total = XPData.data[days_so_far - 1].y; 
 
var average_per_day = total/days_so_far; 
 

 
var trend_total = total; 
 
for (i = days_so_far; i < days; i++) { 
 

 
    p = new DataPoint(i, trend_total); 
 
    XPTrendData.data.push(p); 
 
    trend_total += average_per_day; 
 

 
} 
 

 
// Chillax Line Data Set 
 
var ChillaxLineData = { 
 
    label: 'Chillax Line', 
 
    pointRadius: 0, 
 
    backgroundColor: "rgba(0,0,0,0)", 
 
    borderColor: "#337AB7", 
 
    data: [], 
 
}; 
 

 
// Chill Line Generation 
 
for (i = 1; i < days; i++) { 
 
    p = new DataPoint(i, Math.floor(i * chillax * 10/days)); 
 
    ChillaxLineData.data.push(p); 
 

 
} 
 

 
var options = { 
 
    scaleUse2Y: true, 
 

 
    scales: { 
 

 
    xAxes: [{ 
 
     type: 'linear', 
 
     position: 'bottom', 
 
     ticks: { 
 
     max: days, 
 
     min: 0, 
 
     stepSize: 5, 
 
     }, 
 
     scaleLabel: { 
 
     display: true, 
 
     labelString: 'Days of Class' 
 
     }, 
 
    }], 
 

 
    yAxes: [{ 
 
     id: "y-axis-XP", 
 
     position: 'right', 
 
     ticks: { 
 
      max: 1000, 
 
      min: 0, 
 
      stepSize: 50, 
 
     }, 
 

 
     scaleLabel: { 
 
      display: true, 
 
      labelString: 'XP' 
 
     }, 
 

 
     gridLines: {}, 
 
     }, 
 
     { 
 
     id: "y-axis-percent", 
 
     position: 'left', 
 

 
     ticks: { 
 
      max: 100, 
 
      min: 0, 
 
      stepSize: 5, 
 
     }, 
 

 
     scaleLabel: { 
 
      display: true, 
 
      labelString: 'Percent' 
 
     }, 
 

 
     gridLines: { 
 
      /*show: true, 
 
      color: "rgba(255, 255, 255, 1)", 
 
      lineWidth: 1, 
 
      drawOnChartArea: true, 
 
      drawTicks: true, 
 
      zeroLineWidth: 1, 
 
      zeroLineColor: "rgba(255,255,255,1)", */ 
 
     }, 
 
     } 
 

 

 
    ], 
 
    }, 
 

 
    title: { 
 
    text: 'A Map of Your Progress', 
 
    display: true, 
 
    }, 
 

 
    legend: { 
 
    position: 'top', 
 
    }, 
 

 
}; 
 

 
var data = { 
 
    datasets: [XPData, 
 
    XPTrendData, 
 
    ChillaxLineData, 
 
    ] 
 
}; 
 

 
var myChart = new Chart(ctx, { 
 
    type: 'line', 
 
    data: data, 
 
    options: options, 
 
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.1.6/Chart.bundle.min.js"></script> 
 
<canvas id="myChart" width="400" height="250"></canvas>

ответ

2

использование текущей библиотеки

<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.5.0/Chart.js"></script>

добавить положил

legend: { 
    labels: { 
     usePointStyle: true, 
    }, 
    } 

внутри вариантов, а не внутри var XPData = {...}

fiddle

var ctx = document.getElementById("myChart"); 
 

 
class DataPoint { 
 
    constructor(x, y) { 
 
    this.x = x; 
 
    this.y = y; 
 
    } 
 
} 
 

 
var days = 85; 
 
var chillax = 72.5; 
 

 
// XP DATA SET 
 
var XPData = { 
 
    label: 'XP Earned', 
 
    fill: false, 
 
    backgroundColor: "#444", 
 
    borderColor: "#444", 
 
    pointBorderColor: "#444", 
 
    pointBackgroundColor: "#444", 
 
    data: [], 
 
    showLine: false, 
 
}; 
 

 
// XP Data generation 
 
var total = 0; 
 
for (var i = 0; i < 35; i++) { 
 
    total += 10 * Math.floor(Math.random() + 0.5); 
 
    total += 5 * Math.floor(Math.random() + 0.5); 
 
    total += 5 * Math.floor(Math.random() + 0.5); 
 

 
    var p = new DataPoint(i + 1, total); 
 
    XPData.data.push(p); 
 
} 
 

 

 
// XP Trend Data  
 
var XPTrendData = { 
 
    label: 'XP Trend', 
 
    fill: false, 
 
    pointRadius: 0, 
 
    lineTension: 0, 
 
    borderDash: [5, 5], 
 
    borderColor: "#ccc", 
 
    backgroundColor: "rgba(0,0,0,0)", 
 
    data: [], 
 
}; 
 

 
// XP Trend calculaion 
 
var total = 0; 
 
var days_so_far = XPData.data.length; 
 
total = XPData.data[days_so_far - 1].y; 
 
var average_per_day = total/days_so_far; 
 

 
var trend_total = total; 
 
for (i = days_so_far; i < days; i++) { 
 

 
    p = new DataPoint(i, trend_total); 
 
    XPTrendData.data.push(p); 
 
    trend_total += average_per_day; 
 

 
} 
 

 
// Chillax Line Data Set 
 
var ChillaxLineData = { 
 
    label: 'Chillax Line', 
 
    pointRadius: 0, 
 
    backgroundColor: "rgba(0,0,0,0)", 
 
    borderColor: "#337AB7", 
 
    data: [], 
 
}; 
 

 
// Chill Line Generation 
 
for (i = 1; i < days; i++) { 
 
    p = new DataPoint(i, Math.floor(i * chillax * 10/days)); 
 
    ChillaxLineData.data.push(p); 
 

 
} 
 

 

 

 
var options = { 
 
    scaleUse2Y: true, 
 

 
    scales: { 
 

 
    xAxes: [{ 
 
     type: 'linear', 
 
     position: 'bottom', 
 
     ticks: { 
 
     max: days, 
 
     min: 0, 
 
     stepSize: 5, 
 
     }, 
 
     scaleLabel: { 
 
     display: true, 
 
     labelString: 'Days of Class' 
 
     }, 
 
    }], 
 

 
    yAxes: [{ 
 
     id: "y-axis-XP", 
 
     position: 'right', 
 
     ticks: { 
 
      max: 1000, 
 
      min: 0, 
 
      stepSize: 50, 
 
     }, 
 

 
     scaleLabel: { 
 
      display: true, 
 
      labelString: 'XP' 
 
     }, 
 

 
     gridLines: {}, 
 
     }, { 
 
     id: "y-axis-percent", 
 
     position: 'left', 
 

 
     ticks: { 
 
      max: 100, 
 
      min: 0, 
 
      stepSize: 5, 
 
     }, 
 

 
     scaleLabel: { 
 
      display: true, 
 
      labelString: 'Percent' 
 
     }, 
 

 
     gridLines: { 
 
      /*show: true, 
 
      color: "rgba(255, 255, 255, 1)", 
 
      lineWidth: 1, 
 
      drawOnChartArea: true, 
 
      drawTicks: true, 
 
      zeroLineWidth: 1, 
 
      zeroLineColor: "rgba(255,255,255,1)", */ 
 
     }, 
 
     } 
 

 

 
    ], 
 
    }, 
 

 
    title: { 
 
    text: 'A Map of Your Progress', 
 
    display: true, 
 
    }, 
 
    legend: { 
 
    labels: { 
 
     usePointStyle: true, 
 
    }, 
 
    } 
 

 
}; 
 

 
var data = { 
 
    datasets: [XPData, 
 
    XPTrendData, 
 
    ChillaxLineData, 
 
    ] 
 
}; 
 

 
var myChart = new Chart(ctx, { 
 
    type: 'line', 
 
    data: data, 
 
    options: options, 
 
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.5.0/Chart.js"></script> 
 

 
<canvas id="myChart" width="400" height="250"></canvas>

+0

Прошу прощения. Я не заметил, но теперь все они используют стиль точки. Невозможно ли просто установить один набор данных для использования точек? Мне не нужны точки в данных только для линии! – 43Tesseracts

+0

Я так не думаю, что можно применить к одиночным сериям данных –

6

вы должны использовать код, как это в ур вариантах:

options: { 
    legend: { 
     labels: { 
      usePointStyle: true 
     } 
    } 
}, 
+0

Я добавил это, но это не имело значения. См. Здесь: https://jsfiddle.net/qmhhc089/17/ – 43Tesseracts

1

showLine = ложь , not showLine s. Затем установите цвета границы/фона как обычно, и должна появиться легенда.

setPointStyle в вариантах изменяет легенду, чтобы выглядеть как точка.

+0

Можете ли вы заставить скрипку работать? Я попытался добавить usePointStyle без везения: https://jsfiddle.net/qmhhc089/17/ – 43Tesseracts

+0

Ниже, setPointStyle начинает работать с версии 2.2.0. И должен быть под легендой: {labels: {setPointStyle: true},} – Yobmod

Смежные вопросы