英文:
Is there a way to give a specific data always the same color in a javaFX chart?
问题
以下是您提供的内容的翻译结果:
.chart {
-fx-background-color: #484848;
}
.chart-legend {
-fx-background-color: transparent;
-fx-text-fill: #fff;
-fx-border-color: #333;
}
.chart-legend-item {
-fx-text-fill: #fff;
}
.default-color0.chart-pie { -fx-pie-color: 绿色; }
.default-color1.chart-pie { -fx-pie-color: #ff0000; }
.default-color2.chart-pie { -fx-pie-color: #ce0000; }
.default-color3.chart-pie { -fx-pie-color: #a80000; }
.default-color4.chart-pie { -fx-pie-color: #870000; }
.default-color5.chart-pie { -fx-pie-color: #560000; }
.default-color6.chart-pie { -fx-pie-color: #380000; }
.default-color7.chart-pie { -fx-pie-color: #1c0000; }
.chart-pie-label-line {
-fx-stroke: #fff;
-fx-fill: #fff;
}
.chart-pie-label {
-fx-fill: #fff;
}
private void setUpPieChart() {
this.pieChart.setLabelLineLength(8f);
this.updatePieChart();
}
private void updatePieChart() {
Lecture lecture = this.lectureTable.getSelectionModel().getSelectedItem();
if (lecture == null)
this.pieChart.getData().clear();
else
this.pieChart.setData(lecture.getAttendances().stream().collect(Collectors.groupingBy(Attendance::getType,
Collectors.counting())).entrySet().stream().sorted(Comparator.comparing(item -> item.getKey()
.toString())).map(item -> new PieChart.Data(String.format("%s: %.0f%%", item.getKey(),
item.getValue() * 100f / lecture.getAttendaceSize()), item.getValue()))
.collect(toCollection(FXCollections::observableArrayList)));
}
如果您需要更多帮助,请随时提问。
英文:
I am making a piechart in which you see attendances of students from a lecture.
Personally I thought it would be cool that the number of present students will always be green in the piechart. and the reasons of absence all a different shade of red. Is there any way to do this?
Here is my css:
<!-- language: lang-css -->
.chart {
-fx-background-color: #484848;
}
.chart-legend {
-fx-background-color: transparent;
-fx-text-fill: #fff;
-fx-border-color: #333;
}
.chart-legend-item {
-fx-text-fill: #fff;
}
.default-color0.chart-pie { -fx-pie-color: green; }
.default-color1.chart-pie { -fx-pie-color: #ff0000; }
.default-color2.chart-pie { -fx-pie-color: #ce0000; }
.default-color3.chart-pie { -fx-pie-color: #a80000; }
.default-color4.chart-pie { -fx-pie-color: #870000; }
.default-color5.chart-pie { -fx-pie-color: #560000; }
.default-color6.chart-pie { -fx-pie-color: #380000; }
.default-color7.chart-pie { -fx-pie-color: #1c0000; }
.chart-pie-label-line {
-fx-stroke: #fff;
-fx-fill: #fff;
}
.chart-pie-label {
-fx-fill: #fff;
}
And here is my Java:
<!-- language: lang-java -->
private void setUpPieChart() {
this.pieChart.setLabelLineLength(8f);
this.updatePieChart();
}
private void updatePieChart() {
Lecture lecture = this.lectureTable.getSelectionModel().getSelectedItem();
if (lecture == null)
this.pieChart.getData().clear();
else
// Get all attendances of the lecture object which was obtained from the currently selected row,
// create a temporary dictionary by grouping all attendances by attendance type and their respective count,
// sort the dictionary by attendance name and generate a list of pie chart slices for each dictionary item
this.pieChart.setData(lecture.getAttendances().stream().collect(Collectors.groupingBy(Attendance::getType,
Collectors.counting())).entrySet().stream().sorted(Comparator.comparing(item -> item.getKey()
.toString())).map(item -> new PieChart.Data(String.format("%s: %.0f%%", item.getKey(),
item.getValue() * 100f / lecture.getAttendaceSize()), item.getValue()))
.collect(toCollection(FXCollections::observableArrayList)));
}
Thanks in advance
答案1
得分: 1
该系列的着色是根据添加系列的顺序进行的。现在您的第一个系列被设置为“绿色”,只要您调整算法,使您添加到饼图中的第一个系列是“在校学生人数”,那么该系列将始终显示为绿色。
英文:
Coloring of the series is done based on the order that the series is added. Right now your first series is set to be "green" so as long as you adjust your algorithm so that the first series you add to the PieChart is the "number of present students", that series will always be green.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论