我正在使用.Net 4.0中的图表库创建一个包含多个系列的堆积柱形图.我的目标是一个直方图,显示几个系列(教师)每天的累计行动次数(报告完成次数).通常缺少数据(特定教师当天没有活动).

当系列中缺少数据时,我会在条形图中出现间隙:

我的代码:

public ActionResult CompletionHistogram(int sid,int width,int height)
    {
        Site site = SiteRepository.Get(sid);
        if (site == null)
            return new HttpNotFoundResult();

        Chart chart = new Chart();
        chart.Height = height;
        chart.Width = width;
        ChartArea area = chart.ChartAreas.Add("Default");

        // Treat each teacher as a series
        foreach (Teacher t in site.Teachers)
        {
            Series series = chart.Series.Add(t.FullName);
            series.ChartType = SeriesChartType.StackedColumn;
            series.Name = t.FullName;

            // Group completions by day (filter out incomplete reports and null timestamps)
            var groups = t.StudentReports
                .Where<StudentReport>(rep => rep.IsComplete && rep.FirstSaveTimestamp.HasValue)
                .GroupBy<StudentReport,DateTime>(rep => rep.FirstSaveTimestamp.Value.Date);

            bool hasPoints = false;
            foreach (var g in groups)
            {
                series.Points.AddXY(g.Key,g.Count());
                hasPoints = true;
            }

            series.IsValueShownAsLabel = true;
            series.ToolTip = "#VALX";

            if (hasPoints)
                chart.DataManipulator.InsertEmptyPoints(1,IntervalType.Days,series);
        }


        area.AxisX.LabelStyle.Format = "ddd M/d";
        return new ChartResult(chart);
    }

我怎么能删除

我有办法让这项工作.
对不起,答案很长,但我发现你尝试实施这个答案的方式会影响它是否有效.

在添加点时,需要手动将点设置为零.
注意:我无法通过在事后添加零点来完成这项工作.

请参阅示例和结果屏幕截图旁边的内容:
chart1.Series.Clear();
chart1.Series.Add(new Series());
chart1.Series.Add(new Series());
chart1.Series.Add(new Series());
chart1.Series.Add(new Series());

foreach (Series s in chart1.Series)
{
    s.ChartType = SeriesChartType.StackedColumn;
}

//chart1.Series[0].Points.Add(new DataPoint(0,0));
chart1.Series[0].Points.Add(new DataPoint(1,3));
chart1.Series[0].Points.Add(new DataPoint(2,3));
chart1.Series[0].Points.Add(new DataPoint(3,3));

chart1.Series[1].Points.Add(new DataPoint(0,3));
//chart1.Series[1].Points.Add(new DataPoint(1,0));
chart1.Series[1].Points.Add(new DataPoint(2,3));
chart1.Series[1].Points.Add(new DataPoint(3,3));

chart1.Series[2].Points.Add(new DataPoint(0,3));
chart1.Series[2].Points.Add(new DataPoint(1,3));
//chart1.Series[2].Points.Add(new DataPoint(2,0));
chart1.Series[2].Points.Add(new DataPoint(3,3));

chart1.Series[3].Points.Add(new DataPoint(0,3));
chart1.Series[3].Points.Add(new DataPoint(1,3));
chart1.Series[3].Points.Add(new DataPoint(2,3));
//chart1.Series[3].Points.Add(new DataPoint(3,0));

chart1.SaveImage("C:\\Before.png",ChartimageFormat.Png);

“before.png”的图片:

现在删除系列的注释,在给定的x值下没有数据点:

(注意!我发现如果你在给定y值为0的值的最后给你的值添加点也不起作用 – 也就是在我保存图像之前.系列中点的顺序似乎很重要对于StackedColumn,我从来没有使用过这种类型,除了调查如何回答这个问题,这对于这类用户来说可能是常识)

chart1.Series.Clear();
chart1.Series.Add(new Series());
chart1.Series.Add(new Series());
chart1.Series.Add(new Series());
chart1.Series.Add(new Series());

foreach (Series s in chart1.Series)
{
    s.ChartType = SeriesChartType.StackedColumn;
}

chart1.Series[0].Points.Add(new DataPoint(0,3));
chart1.Series[1].Points.Add(new DataPoint(1,3));
chart1.Series[2].Points.Add(new DataPoint(2,3));
chart1.Series[3].Points.Add(new DataPoint(3,0));

// If you add the empty points here,it does not seem to work.  
// Empty points are as follows,and are already added above in the 'after' example.
// chart1.Series[0].Points.Add(new DataPoint(0,0));
// chart1.Series[1].Points.Add(new DataPoint(1,0));
// chart1.Series[2].Points.Add(new DataPoint(2,0));
// chart1.Series[3].Points.Add(new DataPoint(3,0));

chart1.SaveImage("C:\\After.png",ChartimageFormat.Png);

“after.png”的图片:

那么,鉴于您无法在事后添加零点(尽管您可以插入它们?),您需要将代码修改为以下内容:

var allPossibleGroups = t.StudentReports;

var groups = t.StudentReports
            .Where<StudentReport>(rep => rep.IsComplete && rep.FirstSaveTimestamp.HasValue)
            .GroupBy<StudentReport,DateTime>(rep => rep.FirstSaveTimestamp.Value.Date);

        bool hasPoints = false;
        foreach (var g in allPossibleGroups)
        {
            if(groups.ContainsKey(g))
            {
                series.Points.AddXY(g.Key,g.Count());
                hasPoints = true;
            }
            else
            {
                series.Points.AddXY(g.Key,0);
            }
        }

对于长代码块感到抱歉,但是示例是必要的,以演示如何使其工作,而不会陷入在末尾添加空点(其中y = 0)的陷阱,因为这将无效.

如果您需要更多帮助,请告诉我.

.net-4.0 – Microsoft图表堆积柱形图存在差距的更多相关文章

  1. 基于HTML5 Canvas的3D动态Chart图表的示例

    这篇文章主要介绍了基于HTML5 Canvas的3D动态Chart图表的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. ios – 将PDF文件附加到电子邮件 – Swift

    我想发送带有PDF附件的电子邮件.我创建了PDF文件,然后我做了以下哪些错误我相信:在发送电子邮件之前,我可以看到附带的chart.pdf,但是当我发送电子邮件时,它是在没有附件的情况下发送的,这是因为我没有正确附加文件.解决方法您将错误的mimeType传递给addAttachmentData().使用application/pdf而不是pdf.

  3. mpandroidchart – 条形图中的y值变化动画

    在barChart上调用animateY时,将重绘整个图表,将条形图从y-zero设置为y-new.是否可以将动画限制为值更改.因此,允许用户看到图表如何从y-old增长到y-new?解决方法我遇到了同样的问题,无法找到解决方案.所以,我创建了一个可以调用来处理这种任务的类.你可以像这样调用这个类:

  4. 在MPAndroidChart库中禁用缩放缩放

    我想在MPAndroidChart库的barchart上禁用缩放缩放,我该怎么做.也不行.解决方法试试这个,disableallzooming:更多信息请参阅here

  5. 关于vue-tree-chart简单的使用

    这篇文章主要介绍了关于vue-tree-chart简单的使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  6. .net-4.0 – Microsoft图表堆积柱形图存在差距

    我发现如果你在给定y值为0的值的最后给你的值添加点也不起作用–也就是在我保存图像之前.系列中点的顺序似乎很重要对于StackedColumn,我从来没有使用过这种类型,除了调查如何回答这个问题,这对于这类用户来说可能是常识)“after.png”的图片:那么,鉴于您无法在事后添加零点(尽管您可以插入它们?

  7. 在php mysql中使用Google Chart API显示条形图

    我一直在搜索很多这个.我得到了解决方案.这里是.这是使用AJAX在PHP中完成的.我有2页是googleapi.PHP和其他getData.PHP,由googleapi.PHP发送的AJAX请求使用.googleapi.PHP访问getdata.PHP就是这样,你需要创建一个数据库.它的作用就像一个魅力.我知道你的帖子是一个“答案”,但我认为我会进来的.如果你想要动态地输入数据到Google图表中,你可以使用PHP回调到javascript中.PHP可用于从您的服务器或MysqL表中获取信息.这是一个例子

  8. 使用Ajax将数据加载到Highcharts中

    我试图在页面加载和使用JQUERYAJAX调用选择菜单更改时更新高级图表.在[[10,1228800000],[10,1228800000]]格式中返回数据.该图表为空白,不显示任何数据.试过这里发布的几个解决方案,但都没有奏效.有错误吗?

  9. 【Chart.js】通过Ajax请求JSON数据来绘制图表

    背景在使用Chart.js绘制图表时,我们通常会有这样的需求:从后台方法动态获取图表的数据,而非Demo中使用的静态数据。本文将分享如何使用Ajax动态请求JSON数据并且完成图表的绘制。

  10. Highcharts AJAX JSON JQuery 实现动态数据交互显示图表

    HighCharts支持的图表类型有曲线图、区域图、柱状图、饼状图、散状点图和综合图表。并转为json字符串数组8.3DAO使用的的JDBCTemplate传递sql语句查询。返回list对象以上基本完成了数据的获取和转JSON字符串数组剩下就是在页面接受JSON并填充到highcharts图表里面9.JS代码。使用AJAX传递过来。并填充到highcharts里面即可。怨自己没好好学习jquery。

随机推荐

  1. static – 在页面之间共享数据的最佳实践

    我想知道在UWP的页面之间发送像’selectedItem’等变量的最佳做法是什么?创建一个每个页面都知道的静态全局变量类是一个好主意吗?

  2. .net – 为Windows窗体控件提供百分比宽度/高度

    WindowsForm开发的新手,但在Web开发方面经验丰富.有没有办法为Windows窗体控件指定百分比宽度/高度,以便在用户调整窗口大小时扩展/缩小?当窗口调整大小时,可以编写代码来改变控件的宽度/高度,但我希望有更好的方法,比如在HTML/CSS中.在那儿?

  3. 使用Windows Azure查询表存储数据

    我需要使用特定帐户吗?>将应用程序部署到Azure服务后,如何查询数据?GoogleAppEngine有一个数据查看器/查询工具,Azure有类似的东西吗?>您可以看到的sqlExpressintance仅在开发结构中,并且一旦您表示没有等效,所以请小心使用它.>您可以尝试使用Linqpad查询表格.看看JamieThomson的thispost.

  4. windows – SetupDiGetClassDevs是否与文档中的设备实例ID一起使用?

    有没有更好的方法可以使用DBT_DEVICEARRIVAL事件中的数据获取设备的更多信息?您似乎必须指定DIGCF_ALLCLASSES标志以查找与给定设备实例ID匹配的所有类,或者指定ClassGuid并使用DIGCF_DEFAULT标志.这对我有用:带输出:

  5. Windows Live ID是OpenID提供商吗?

    不,WindowsLiveID不是OpenID提供商.他们使用专有协议.自从他们的“测试版”期结束以来,他们从未宣布计划继续它.

  6. 如果我在代码中进行了更改,是否需要重新安装Windows服务?

    我写了一个Windows服务并安装它.现在我对代码进行了一些更改并重新构建了解决方案.我还应该重新安装服务吗?不,只需停止它,替换文件,然后重新启动它.

  7. 带有双引号的字符串回显使用Windows批处理输出文件

    我正在尝试使用Windows批处理文件重写配置文件.我循环遍历文件的行并查找我想要用指定的新行替换的行.我有一个’函数’将行写入文件问题是%Text%是一个嵌入双引号的字符串.然后失败了.可能还有其他角色也会导致失败.如何才能使用配置文件中的所有文本?尝试将所有“在文本中替换为^”.^是转义字符,因此“将被视为常规字符你可以尝试以下方法:其他可能导致错误的字符是:

  8. .net – 将控制台应用程序转换为服务?

    我正在寻找不同的优势/劣势,将我们长期使用的控制台应用程序转换为Windows服务.我们为ActiveMQ使用了一个叫做java服务包装器的东西,我相信人们告诉我你可以用它包装任何东西.这并不是说你应该用它包装任何东西;我们遇到了这个问题.控制台应用程序是一个.NET控制台应用程序,默认情况下会将大量信息记录到控制台,尽管这是可配置的.任何推荐?我们应该在VisualStudio中将其重建为服务吗?我使用“-install”/“-uninstall”开关执行此操作.例如,seehere.

  9. windows – 捕获外部程序的STDOUT和STDERR *同时*它正在执行(Ruby)

    哦,我在Windows上:-(实际上,它比我想象的要简单,这看起来很完美:…是的,它适用于Windows!

  10. windows – 当我试图批量打印变量时,为什么我得到“Echo is on”

    我想要执行一个简单的批处理文件脚本:当我在XP中运行时,它给了我预期的输出,但是当我在Vista或Windows7中运行它时,我在尝试打印值时得到“EchoisOn”.以下是程序的输出:摆脱集合表达式中的空格.等号(=)的两侧可以并且应该没有空格BTW:我通常在@echo关闭的情况下启动所有批处理文件,并以@echo结束它们,所以我可以避免将代码与批处理文件的输出混合.它只是使您的批处理文件输出更好,更清洁.

返回
顶部