C# 动态数据显示:更改图形的X轴日期时间格式

C# 动态数据显示:更改图形的X轴日期时间格式,c#,wpf,dynamic-data-display,C#,Wpf,Dynamic Data Display,我正在使用wpf应用程序来显示图形。它很好用 问题: 请检查以下内容: 如何使用12小时时间格式而不是24小时?请建议 更新: 这是我的XAML for graph: <d3:ChartPlotter Name="plotter" Margin="3,121,5,0" Grid.RowSpan="2" Height="373" VerticalAlignment="Top" VerticalContentAlignment="Stretch" LegendVisible="False"

我正在使用wpf应用程序来显示图形。它很好用

问题:

请检查以下内容:

如何使用12小时时间格式而不是24小时?请建议

更新:

这是我的XAML for graph:

 <d3:ChartPlotter Name="plotter" Margin="3,121,5,0" Grid.RowSpan="2" Height="373" VerticalAlignment="Top" VerticalContentAlignment="Stretch" LegendVisible="False">
    <d3:ChartPlotter.HorizontalAxis>
        <d3:HorizontalDateTimeAxis Name="dateAxis" />                                    
    </d3:ChartPlotter.HorizontalAxis>                                                               
    <d3:VerticalAxisTitle FontFamily="Georgia" Content="Sensor Readings" />
    <d3:HorizontalAxisTitle FontFamily="Georgia" Content="Date" />
</d3:ChartPlotter>

政务司司长:

var dates=(来自datDs.Tables[0]中的dr)。AsEnumerable()
选择新的
{
日期=博士字段(“记录日期”)
}.date)。ToList();
var datesDataSource=新的可枚举数据源(日期);
datesDataSource.SetXMapping(x=>dateAxis.ConvertToDouble(x));

在这里,您可以找到一个很好的使用示例:

我认为这可以帮助你:

在x轴上,我使用ConvertToDouble方法显式转换 将日期时间数据转换为double类型。在y轴上,我只写了y=>y (读作“y到y”),隐式地将输入int y转换为 输出双y。我可以通过 正在编写SetYMapping(y=>Convert.ToDouble(y).我对x和y的选择 因为lambda表达式的参数是任意的-我可以 使用任何参数名称

以及守则:

var datesDataSource = new EnumerableDataSource<DateTime>(dates);
datesDataSource.SetXMapping(x => dateAxis.ConvertToDouble(x));
试试这个:(c#,DevExpress)


要更改日期时间轴应用格式的方式,您必须进入D3的源代码。。。 DynamicDataDisplay/Charts/Axes/DateTime/DateTimeLabelProviderBase.cs

您必须更改GetDateFormat方法。以下示例将生成您想要的结果:

protected virtual string GetDateFormat(DifferenceIn diff)
    {
        string format = null;

        switch (diff)
        {
            case DifferenceIn.Year:
                format = "yyyy";
                break;
            case DifferenceIn.Month:
                format = "MMM";
                break;
            case DifferenceIn.Day:
                format = "%d";
                break;
            case DifferenceIn.Hour:
                format = "hh:mm";
                break;
            case DifferenceIn.Minute:
                format = "%m";
                break;
            case DifferenceIn.Second:
                format = "ss";
                break;
            case DifferenceIn.Millisecond:
                format = "fff";
                break;
            default:
                break;
        }

        return format;
    }

关键是将一小时的大小写从大写字母H(24小时时间)更改为小写字母H(12小时时间)。希望这对您有所帮助,祝您的制图项目顺利!

问题涉及D3 ChartPlotter,而不是DevExpress.ChartControl
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
((XYDiagram)chartControl.Diagram).AxisX.DateTimeOptions.Format = DateTimeFormat.Custom;
((XYDiagram)chartControl.Diagram).AxisX.DateTimeOptions.FormatString = "yyyy-MM-dd";
protected virtual string GetDateFormat(DifferenceIn diff)
    {
        string format = null;

        switch (diff)
        {
            case DifferenceIn.Year:
                format = "yyyy";
                break;
            case DifferenceIn.Month:
                format = "MMM";
                break;
            case DifferenceIn.Day:
                format = "%d";
                break;
            case DifferenceIn.Hour:
                format = "hh:mm";
                break;
            case DifferenceIn.Minute:
                format = "%m";
                break;
            case DifferenceIn.Second:
                format = "ss";
                break;
            case DifferenceIn.Millisecond:
                format = "fff";
                break;
            default:
                break;
        }

        return format;
    }