- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
目前,我正在尝试使用 Windows 窗体显示图表,该图表在 X 轴上显示每月数据,在 Y 轴上显示整数值;但是,我没有为 X 轴正确设置范围,其中 MonthYear 是一个日期时间:
var pnChart = new System.Windows.Forms.Panel();
pnChart.Controls.Clear();
DataTable dtChartData = myDatabaseLayer.BuildDataTable("SELECT Added, Modified FROM tblStatistics WHERE ApplicationID = " + intApplicationID + " ORDER BY MonthYear");
Chart chart = GenerateChart(dtChartData, pnChart.Width, pnChart.Height, "ActiveBorder", 6);
chart.Series[0].XValueType = ChartValueType.DateTime;
chart.ChartAreas[0].AxisX.LabelStyle.Format = "yyyy-MM-dd";
chart.ChartAreas[0].AxisX.Interval = 1;
chart.ChartAreas[0].AxisX.IntervalType = DateTimeIntervalType.Months;
chart.ChartAreas[0].AxisX.IntervalOffset = 1;
pnChart.Controls.Add(chart);
问题是,显示图表时,X 轴的日期时间为“1900-01-01”,所以我的问题是,如何将日期范围设置为从 2013-01-01 开始?
请注意,我已经在互联网上搜索并尝试了以下设置,但它们没有给我正确的范围:
chart.ChartAreas[0].AxisX.Maximum = DateTime.Now.Ticks;
或者,
chart.ChartAreas[0].AxisX.Crossing = DateTime.Now.Ticks;
或者,
chart.ChartAreas[0].AxisX.Minimum = DateTime.Now.Ticks;
TIA。
更新:请注意,我发现了如何使用这个正确设置范围:
chart.Series[0].XValueType = ChartValueType.DateTime;
DateTime minDate = new DateTime(2013, 01, 01);
DateTime maxDate = DateTime.Now;
chart.ChartAreas[0].AxisX.Minimum = minDate.ToOADate();
chart.ChartAreas[0].AxisX.Maximum = maxDate.ToOADate();
上面的代码现在为 X 轴设置了合适的范围;然而,现在图表本身是空白的。
更新 2:
是的,谢谢 DasKrumelmonster——修复了它!我使用的代码来自 http://www.codeproject.com/Articles/168056/Windows-Charting-Application ,并且应该更仔细地查看作者的 protected 内部 Chart GenerateChart(DataTable dtChartDataSource, int width, int height, string bgColor, int intType) 函数。为了纠正这个问题,我更改了这些行:
foreach (DataRow dr in dtChartDataSource.Rows)
{
double dataPoint = 0;
double.TryParse(dr[dc.ColumnName].ToString(), out dataPoint);
DataPoint objDataPoint = new DataPoint() { AxisLabel = "series", YValues = new double[] { dataPoint } };
chart.Series[series].Points.Add(dataPoint);
}
对此:
DateTime dtStart = new DateTime(2013, 01, 01);
int intMonthCounter = 0;
//Add data points to the series
foreach (DataRow dr in dtChartDataSource.Rows)
{
double dataPoint = 0;
double.TryParse(dr[dc.ColumnName].ToString(), out dataPoint);
DataPoint objDataPoint = new DataPoint() { AxisLabel = "series", YValues = new double[] { dataPoint } };
chart.Series[series].Points.AddXY(dtStart.AddMonths(intMonthCounter), dataPoint);
intMonthCounter++;
}
谢谢!
最佳答案
无法重现。我试过这段代码:
private void button1_Click(object sender, EventArgs e)
{
var s = new Series();
s.ChartType = SeriesChartType.Line;
var d = new DateTime(2013, 04, 01);
s.Points.AddXY(d, 3);
s.Points.AddXY(d.AddMonths(-1), 2);
s.Points.AddXY(d.AddMonths(-2), 1);
s.Points.AddXY(d.AddMonths(-3), 4);
chart1.Series.Clear();
chart1.Series.Add(s);
chart1.Series[0].XValueType = ChartValueType.DateTime;
chart1.ChartAreas.Add(new ChartArea()); // In some cases the winforms designer adds this already
chart1.ChartAreas[0].AxisX.LabelStyle.Format = "yyyy-MM-dd";
chart1.ChartAreas[0].AxisX.Interval = 1;
chart1.ChartAreas[0].AxisX.IntervalType = DateTimeIntervalType.Months;
chart1.ChartAreas[0].AxisX.IntervalOffset = 1;
chart1.Series[0].XValueType = ChartValueType.DateTime;
DateTime minDate = new DateTime(2013, 01, 01).AddSeconds(-1);
DateTime maxDate = new DateTime(2013, 05, 01); // or DateTime.Now;
chart1.ChartAreas[0].AxisX.Minimum = minDate.ToOADate();
chart1.ChartAreas[0].AxisX.Maximum = maxDate.ToOADate();
}
也许我在途中修正了你的错误。
它按预期工作:一行有四个数据点,所有 x 轴标签都是可见的,图形本身也是如此。如果仍然存在问题,请提供完整的测试代码以及应该发生什么与实际发生什么的描述。
关于c# - 如何为 System.Windows.Forms.DataVisualization.Charting 在 X 轴上设置日期时间范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15907556/
我在 how to create Chart progammaticaly in ASP.NET MVC 上找到了一篇不错的文章在 ASP.NET 网站上。作者 Scott Mitchell 使用了一
我有一个系列: System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Area 如何使该区域透明以便我可以看到其他以前绘制的系
我正在进行一些天体物理学研究,并且正在使用 Win-Form Chart 组件分析数据。 X 轴上是日期,Y 轴上是值,我使用 Chart 的成员方法 DataManipulator.Financia
我正在使用 System.Windows.Forms.DataVisualization.Charting.Chart 控件,并将 ChartArea 的 AxisX 和 Y 都设置为 true。放大
有人知道如何格式化和控制 .Net 4 DataVisualization.Charting 图表 Y 轴上显示的值吗? 我在 Y 轴上有值,在 X 轴上有日期。 Y 轴上的值显示多个小数点,我想对它
我正在使用圆形标记来指示数据点的位置。当点绘制在轴上时,我无法选择它们(使用 HitTest)...但是当它们绘制在图表上的其他任何位置时我可以选择它们。不可选择的点似乎绘制在轴的下方。如果我使标记变
我正在使用以下内容生成图表: private Byte[] myChart() { var query = from o in db.charttest
我正在使用 DataVisualization.Charting.Chart (winform),当用户单击 MouseDown 事件中的折线图时,我需要获取数据点索引。 我知道有一个 HitTest
在我的开发系统上,我安装了 VS 2010,然后是 VS 2012 beta。由于与 CodeSmith 和 .Net 4.5 Beta 发生冲突,我不得不一次卸载它。似乎在我的开发系统缺少一些 dl
我收到这个错误: Server Error in Application. Could not load file or assembly 'System.Web.DataVisualization'
我正在使用 WPF DataVisualization 图表控件来显示一些示例数据。我的问题是 Y 轴显示小数值。我怎样才能让它只显示整数值。 这是我的 XAML 代码
如何在添加点之前获得 DataVisualization.Charting 图表以显示其轴和网格线?目前,即使手动设置轴比例限制,图表区域也是空白的,我看不出有什么好的理由。 最佳答案 将 Axis.
我有一个生成不同类型图表的 Web 服务。这些图表是使用 System.Windows.Forms.DataVisualization.Charting 以编程方式生成的,并保存到 .png 文件中。
我正在尝试在 ASP.NET MVC 中重现雷达图。 这是我应该拥有的 这就是我真正拥有的 到目前为止,它有效,奇数颜色仅用于开发。 但是底部 3 个标签的标签旋转很糟糕,我似乎无法找到如何正确旋转它
我遇到了这个错误 命名空间“System.Windows.Forms”中不存在类型或命名空间名称“DataVisualization”(是否缺少程序集引用?) 这是我在类(class)中的using部
我想使用 .net 4 的内置图表。我有一个现有的 MVC3 应用程序,但我似乎看不到这个命名空间的引用? 有人知道它在哪里吗? 谢谢, 达伦。 最佳答案 我相信它在 System.Web.DataV
我在我的 Windows Phone 8.1 winrt 应用程序中使用 WinRTXamlToolkit.Controls.DataVisualization.Charting。 图表在手机的 De
我使用 Microsoft 的 DataVisualization.Charting.Chart 控件创建了一个显示图表的表单(我使用 .NET 框架的第 4 版)。我还在图表上画了一些注释,为了找到
这可能是一个非常简单的问题,但我在试图弄清楚哪个属性设置 Chart 上的行大小时遇到了很多麻烦。或 Series类(class)。这条线真的很窄,很难看到。 如何为我的FastLine 图表设置
是否有 .NET 的 Windows.Forms.DataVisualization.Charting 的替代品?部件? re-implementation in mono远未结束。 我不在乎界面是否
我是一名优秀的程序员,十分优秀!