C# c语言中的条形图#

C# c语言中的条形图#,c#,graph,C#,Graph,我正在尝试用C#实现一个条形图。我有两个文本框,在其中获取数据,我想为它们绘制一个比较条形图。例如,我有一个原始的cpu(ocpu)和更改的cpu(ccpu)数据,我想为它们绘制一个比较图。 我可以这样做,如图中所示。蓝色是原始值,橙色是更改值。但是,我得到了X轴上的0,1,2,这是我不需要的。我也不需要这两条线之间的线。我还附上了我正在使用的代码片段。图中有两个系列,分别称为“原始”和“修改” chartcpu.Series["Original"].Points.AddY(ocpu.Text.

我正在尝试用C#实现一个条形图。我有两个文本框,在其中获取数据,我想为它们绘制一个比较条形图。例如,我有一个原始的cpu(ocpu)和更改的cpu(ccpu)数据,我想为它们绘制一个比较图。 我可以这样做,如图中所示。蓝色是原始值,橙色是更改值。但是,我得到了X轴上的0,1,2,这是我不需要的。我也不需要这两条线之间的线。我还附上了我正在使用的代码片段。图中有两个系列,分别称为“原始”和“修改”

chartcpu.Series["Original"].Points.AddY(ocpu.Text.ToString());
chartcpu.Series["Modified"].Points.AddY(ccpu.Text.ToString());
chartcpu.ChartAreas[0].AxisX.Title = "CPU";

请让我知道什么是解决方案


--萨米尔·辛格(Samir Singh)

我不完全确定我是否正确地解除了对您的监听,但使用以下代码:

        var original = chart1.Series.Add("Original");
        var modified = chart1.Series.Add("Modified");
        chart1.ChartAreas[0].AxisY.MajorGrid.Enabled = false;
        chart1.ChartAreas[0].AxisY.MinorGrid.Enabled = false;
        chart1.ChartAreas[0].AxisX.MajorGrid.Enabled = false;
        chart1.ChartAreas[0].AxisX.MinorGrid.Enabled = false;

        original.Points.AddXY("CPU", 7.6);
        modified.Points.AddXY("CPU", 1.6);
您将得到以下结果:

如果你想获得一些不同的东西,你可以贴一张“应该怎样”的草图(用油漆或其他东西)

来自德国的问候

更新:

  • 我的数据来自文本框,是否可以将其转换为字符串显示。这是上面提到的评论。我需要将其转换为什么形式
  • 字符串只是文本,图表需要浮点数,如
    System.Windows.Forms.DataVisualization.Charting.DataPoint的YValues属性所示:

    public double[]y值{get;set;}

    Points.AddXY
    已经为您进行了转换,因为它还处理
    DateTime
    DBNull
    等。 如果需要,您可以使用
    Double.TryParse
    自行处理转换

  • “AxisY.MajorGrid.Enabled=false;”的含义是什么。我想我的代码中没有这个
  • 是的,主栅格和次栅格属性控制指定轴上直线的外观。通过禁用它们,您只需关闭它们

  • 我如何改变这里的酒吧的颜色和宽度
  • Series和DataPoint都具有Color属性,因此您可以说:

    chartcpu.Series["Original"].Color = Color.Magenta;
    chartcpu.Series["Modified"].Color = Color.Lime;
    
    或者你喜欢什么颜色:)

    大小如下所示:

    chartcpu.Series["Original"].SetCustomProperty("PointWidth", "2");
    chartcpu.Series["Modified"].SetCustomProperty("PointWidth", "2");
    
    如果我的数据为空,我不想显示任何条形图。现在是0

    当我没有指定任何数据时,我的图表是空的。但只有在拥有有效数据的情况下,才能尝试添加点:

    // e.g. when ocpu text change
    chartcpu.Series["Original"].Points.Clear();
    double yValue = 0;
    if (!String.IsNullOrEmpty(ocpu.Text) && Double.TryParse(ocpu.Text, out yValue))
    {
        chartcpu.Series["Original"].Points.AddXY("CPU", yValue);
    }
    
    更新:

    如何更改左侧网格上以K格式显示的值, 例如,如果它是12000000,我希望它显示为12000K/12M。 另外,如何格式化带有分隔符的条形图上方显示的值 对于1000,例如,如果值为112887296,则为112887296或 112887K/113M(近似值)

    简单方法: 将此添加到初始化逻辑中:

    //string format = "#,0.#0"; // default
    //string format = "#,0,.#0K"; // thousand
    string format = "#,0,,.#0M"; // million, etc.
    cpuchart.ChartAreas[0].AxisY.LabelStyle.Format = format;
    cpuchart.Series.ToList().ForEach(series => series.LabelFormat = format);
    
    msdn上的自定义数字格式:

    动态方法: 为后缀添加字典作为静态变量:

    private static readonly ReadOnlyDictionary<int, string> _numberSuffix = new ReadOnlyDictionary<int, string>(new Dictionary<int, string> {
            { 0, String.Empty }, // default
            { 1, "K" }, // thousand
            { 2, "M" }, // million
            { 3, "B" }, // billion
            { 4, "T" }, // trillion
        });
    

    现在,您可以随时调用此方法格式化图表(例如,当值更改时)

    我不完全确定是否正确地卸载了您,但使用以下代码:

            var original = chart1.Series.Add("Original");
            var modified = chart1.Series.Add("Modified");
            chart1.ChartAreas[0].AxisY.MajorGrid.Enabled = false;
            chart1.ChartAreas[0].AxisY.MinorGrid.Enabled = false;
            chart1.ChartAreas[0].AxisX.MajorGrid.Enabled = false;
            chart1.ChartAreas[0].AxisX.MinorGrid.Enabled = false;
    
            original.Points.AddXY("CPU", 7.6);
            modified.Points.AddXY("CPU", 1.6);
    
    您将得到以下结果:

    如果你想获得一些不同的东西,你可以贴一张“应该怎样”的草图(用油漆或其他东西)

    来自德国的问候

    更新:

  • 我的数据来自文本框,是否可以将其转换为字符串显示。这是上面提到的评论。我需要将其转换为什么形式
  • 字符串只是文本,图表需要浮点数,如
    System.Windows.Forms.DataVisualization.Charting.DataPoint的YValues属性所示:

    public double[]y值{get;set;}

    Points.AddXY
    已经为您进行了转换,因为它还处理
    DateTime
    DBNull
    等。 如果需要,您可以使用
    Double.TryParse
    自行处理转换

  • “AxisY.MajorGrid.Enabled=false;”的含义是什么。我想我的代码中没有这个
  • 是的,主栅格和次栅格属性控制指定轴上直线的外观。通过禁用它们,您只需关闭它们

  • 我如何改变这里的酒吧的颜色和宽度
  • Series和DataPoint都具有Color属性,因此您可以说:

    chartcpu.Series["Original"].Color = Color.Magenta;
    chartcpu.Series["Modified"].Color = Color.Lime;
    
    或者你喜欢什么颜色:)

    大小如下所示:

    chartcpu.Series["Original"].SetCustomProperty("PointWidth", "2");
    chartcpu.Series["Modified"].SetCustomProperty("PointWidth", "2");
    
    如果我的数据为空,我不想显示任何条形图。现在是0

    当我没有指定任何数据时,我的图表是空的。但只有在拥有有效数据的情况下,才能尝试添加点:

    // e.g. when ocpu text change
    chartcpu.Series["Original"].Points.Clear();
    double yValue = 0;
    if (!String.IsNullOrEmpty(ocpu.Text) && Double.TryParse(ocpu.Text, out yValue))
    {
        chartcpu.Series["Original"].Points.AddXY("CPU", yValue);
    }
    
    更新:

    如何更改左侧网格上以K格式显示的值, 例如,如果它是12000000,我希望它显示为12000K/12M。 另外,如何格式化带有分隔符的条形图上方显示的值 对于1000,例如,如果值为112887296,则为112887296或 112887K/113M(近似值)

    简单方法: 将此添加到初始化逻辑中:

    //string format = "#,0.#0"; // default
    //string format = "#,0,.#0K"; // thousand
    string format = "#,0,,.#0M"; // million, etc.
    cpuchart.ChartAreas[0].AxisY.LabelStyle.Format = format;
    cpuchart.Series.ToList().ForEach(series => series.LabelFormat = format);
    
    msdn上的自定义数字格式:

    动态方法: 为后缀添加字典作为静态变量:

    private static readonly ReadOnlyDictionary<int, string> _numberSuffix = new ReadOnlyDictionary<int, string>(new Dictionary<int, string> {
            { 0, String.Empty }, // default
            { 1, "K" }, // thousand
            { 2, "M" }, // million
            { 3, "B" }, // billion
            { 4, "T" }, // trillion
        });
    

    现在,您可以随时调用此方法格式化图表(例如,当值更改时)

    为什么要将y值转换为字符串?为什么要将y值转换为字符串?感谢您的回复。这就是我想要的o/p方式。不过我有几个问题。我的数据来自文本框,是否可以将其转换为字符串显示。这是上面提到的评论。我需要将其转换为什么形式?2.“AxisY.MajorGrid.Enabled=false;”的含义是什么。我想我的代码里没有这个。如何更改此处条形图的颜色和宽度。如果我的数据为空,则不显示条形图。现在显示的是0。我不是C#背景,我是DBA背景,但我正在尝试用C#开发一个应用程序,所以对于这些基本问题感到抱歉-Samir SinghHello Samir,我更新了我的答案。请随时询问进一步的问题