如何在ASP.NET图表中单独更改/设置每个y轴元素的字体?

时间:2013-11-18 04:03:44

标签: c# asp.net fonts mschart

我有一个图表来显示使用ASP.NET图表构建的工作进度。

在y轴上,会有项目名称,子项目和任务。为了提供更具吸引力的可视化,需要对y轴上的每个元素进行不同的表示。像这样:enter image description here (抱歉审查,业务需要)

有没有办法做到这一点?

编辑:附录

图表是由服务构建的,然后保存为MemeryStream对象返回,此对象又转换为图像。

业务基本上只接收项目列表,每个项目的名称将显示在y轴上,其进度跨越x轴:

public static MemoryStream GetProgressStream(List<Project> projects, DateTime period, string title = "") 
{
var serie1 = CreateSerie(" ", Color.Transparent, SeriesChartType.StackedBar, "");
var serie2 = CreateSerie("Demo 2", Color.FromArgb(190, 0, 0, 52), SeriesChartType.StackedBar, "{#}%");
var serie3 = CreateSerie("Demo 3", Color.FromArgb(50, 0, 0, 52), SeriesChartType.StackedBar, "{#}%");
var serie4 = CreateSerie("Demo 4", Color.FromArgb(190, 0, 0, 52), SeriesChartType.StackedBar, "", ChartHatchStyle.WideUpwardDiagonal);

for (var iCnt = projects.Count - 1; iCnt >= 0; iCnt--)
{
    var currentPeriod = projects[i].Plan.PlanEnd.CompareTo(period) <= 0
                ? projects[i].Plan.PlanEnd
                : period;
    var totalDaysCurrentPeriod = (currentPeriod - projects[i].Plan.PlanStart).TotalDays;
    totalDaysCurrentPeriod = totalDaysCurrentPeriod < 0 ? 0 : (currentPeriod -     projects[i].Plan.PlanStart).TotalDays;
    var totalDays = (projects[i].Plan.PlanEnd - projects[i].Plan.PlanStart).TotalDays;

    var isProgressDays = (projects[i].Progress.IsProgress == 0) ? 0 :     projects[i].Progress.IsProgress / projects[i].Progress.PlanProgress *     totalDaysCurrentPeriod;
    var planProgressDays = (projects[i].Progress.PlanProgress == 0) ? 0 : totalDaysCurrentPeriod;
    var iPlanProgress = (projects[i].Progress.PlanProgress - projects[i].Progress.IsProgress);
    totalDaysCurrentPeriod = planProgressDays == 0 && isProgressDays == 0 ? 0 : totalDaysCurrentPeriod;   

    serie1.Points.AddXY(projects[i].Name, projects[i].Plan.PlanStart);
    serie2.Points.AddXY(projects[i].Name, isProgressDays);
    serie3.Points.AddXY(projects[i].Name, planProgressDays - isProgressDays);
    serie4.Points.AddXY(projects[i].Name, totalDays - totalDaysCurrentPeriod);
}
chart.Series.Add(series1);
chart.Series.Add(series2);
chart.Series.Add(series3);
chart.Series.Add(series4);

var memoryStream = new MemoryStream();
chart.SaveImage(memoryStream, ChartImageFormat.Png);
memoryStream.Seek(0, SeekOrigin.Begin);

return memoryStream;
}

0 个答案:

没有答案