技术背景:Aspose.Words For JAVA 20.7.Jar JDK1.8。
技术问题:我使用下面代码创建了一个圆形图 图表,我会设置整个图表的背景和线条。请问怎么单独设置每个系列的背景和线条?
代码如下:
public class Demo05 {
public static void main(String[] args) {
try {
// 创建一个空白文档
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
// 行数据
List<GxyItemData> rowData = AttributeData.list13();
String[] names = new String[]{"男生", "女生", "未知"};
double[] values = new double[]{70.0, 20.0, 10.0};
// 添加表格
drawDoughnutChart(builder,"男女比例",true,names,values);
// 保存文档
String fileName = "output/AsposeWord1" + new SimpleDateFormat("MMddHHmmss").format(new Date()) + ".docx";
doc.save(fileName);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void drawDoughnutChart(DocumentBuilder builder, String title, Boolean showPercent,String[] label, double[] value) throws Exception {
//创建圆环图
Shape shape = builder.insertChart(ChartType.DOUGHNUT, 380, 250);
// 设置图表形状的文字环绕方式
shape.setWrapSide(WrapSide.BOTH);
// 设置图表形状的文字环绕类型为内联
shape.setWrapType(WrapType.INLINE);
// 设置图表形状的垂直对齐方式为居中
shape.setVerticalAlignment(VerticalAlignment.CENTER);
// 设置图表形状的水平对齐方式为居中
shape.setHorizontalAlignment(HorizontalAlignment.CENTER);
// 设置图表形状是否允许重叠
shape.setAllowOverlap(false);
shape.getStroke().setColor(new Color(221,221,221)); // 设置线条颜色
shape.getFill().setColor(new Color(191,226,228)); // 设置填充颜色
com.aspose.words.Chart chart = shape.getChart(); //获取图表对象
// 获取图表的系列集合并清空现有系列
ChartSeriesCollection seriesCollection = chart.getSeries();
seriesCollection.clear();
// 设置图例位置为底部
chart.getLegend().setPosition(LegendPosition.BOTTOM);
// 设置图表标题的显示和文本内容
chart.getTitle().setShow(true);
chart.getTitle().setText(title);
// 设置图表标题不覆盖图表内容
chart.getTitle().setOverlay(false);
// 设置图例不覆盖图表内容
chart.getLegend().setOverlay(false);
// 添加一个系列到系列集合中,系列名称为"Series",X轴标签为label,Y轴值为value
ChartSeries chartSeries = seriesCollection.add("Series", label, value);
//获取系列的数据标签集合,用于控制每个数据点上的标签。
ChartDataLabelCollection dataLabelCollection = chartSeries.getDataLabels();
ChartDataLabel chartDataLabel;
//设置图表系列数据标签 : 循环遍历数据标签集合的长度,为每个数据点添加相应的数据标签。
for (int i = 0; i < label.length; i++) {
chartDataLabel = dataLabelCollection.add(i); //添加一个数据标签到数据标签集合中,标签索引为i。
chartDataLabel.setShowLegendKey(true);//设置数据标签是否显示图例键(标识数据点所属系列的标志)。
chartDataLabel.setShowLeaderLines(true);//设置是否显示指引线,一般指向数据标签的直线。
chartDataLabel.setShowCategoryName(true);//设置是否显示X轴标签,即图表中的每个数据点的标签。
chartDataLabel.setShowSeriesName(false);//设置是否显示系列名称,即图表中的每个系列的名称。
chartDataLabel.setShowBubbleSize(true);//设置是否显示气泡大小,一般在气泡图中使用。
//根据参数 showPercent 决定是否显示百分比,如果为 true,则显示百分比;否则,显示Y轴值。
if (showPercent){
chartDataLabel.setShowPercentage(true);//则显示百分比
}else {
chartDataLabel.setShowValue(true);//显示Y轴值。
}
//设置数据标签的分隔符为换行符,即每个标签显示在一行。
chartDataLabel.setSeparator("\r\n");
}
// 设置系列的平滑属性为true
chartSeries.setSmooth(true);
// 设置段落格式的首行缩进为5个磅
builder.getParagraphFormat().setFirstLineIndent(5);
}
运行效果如下:
image.png (17.9 KB)
期望效果如下:
image.png (21.7 KB)
需求:1.请问大佬们如何将标签设置在图表的边上而不是在图表上面
2.请问怎么单独设置每个系列的颜色,例如我下面的代码 如何引用到上方
private static Color getSeriesColor(int index) {
switch (index) {
case 0:
return Color.MAGENTA;
case 1:
return Color.YELLOW;
case 2:
return Color.GRAY;
default:
return Color.BLACK; // 在这里设置默认颜色
}
}