2016-07-08 8 views
1

https://jsfiddle.net/43Tesseracts/qmhhc089/Display-Punkt-Stil auf Legende in chart.js

für diesen ersten Datensatz der Chart XPData, wie kann ich die Legende Stil setzen Sie den Punkt anstelle der Leitung zu benutzen?

Ich hoffe, alles was ich tun muss, ist hinzuzufügen: showLines: false nach der Scatter Line Chart docs, aber ich kann nicht herausfinden, wo diese Einstellung zu setzen.

Hier wird der Datensatz ist (siehe Geige):

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>

Antwort

2

Verwendung aktuelle Bibliothek

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

Add

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

innen Optionen setzen und nicht in 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

Awe Mist ... Ich habe es nicht bemerkt, aber jetzt benutzen sie alle Punkt Stil. Ist es nicht möglich, die eine Datenmenge nur auf Punkte zu setzen? Ich möchte keine Punkte in den Nur-Zeilen-Daten! – 43Tesseracts

+0

Ich glaube nicht, so ist es möglich, auf einzelne Datenreihen anzuwenden –

6

sollten Sie Code wie folgt in ur Optionen verwenden:

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

Ich fügte dies hinzu, aber es machte keinen Unterschied. Siehe hier: https://jsfiddle.net/qmhhc089/17/ – 43Tesseracts

1

Showline = false , nicht showLine s. Legen Sie dann wie gewohnt Rand-/Hintergrundfarben fest, und die Legende sollte angezeigt werden.

setPointStyle in Optionen ändert dann die Legende so, dass sie wie ein Punkt aussieht.

+0

Kannst du die Geige zum Arbeiten bringen? Ich habe versucht, UsePointStyle ohne Glück hinzuzufügen: https://jsfiddle.net/qmhhc089/17/ – 43Tesseracts

+0

Pro unten beginnt SetPointStyle von Version 2.2.0 zu arbeiten. Und muss unter der Legende sein: {labels: {setPointStyle: true},} – Yobmod