Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Windows窗体图表标签修改_C#_Winforms_Windows Forms Designer - Fatal编程技术网

C# Windows窗体图表标签修改

C# Windows窗体图表标签修改,c#,winforms,windows-forms-designer,C#,Winforms,Windows Forms Designer,我正在创建一个使用图表的windows窗体应用程序。我想修改图表 如何在屏幕截图中编辑图表区背景色白色 如何对每个条应用不同的颜色。 如何格式化Y轴标签需要将文件扩展名与左端对齐,将整数值与右端对齐 这是我当前的屏幕截图 需要像这样更新我的屏幕吗 可以这样对齐标签吗 以下是一个例子: 要设置图表样式,请使用以下命令: // prepare: chart1.Series.Clear(); Series S1 = chart1.Series.Add("S1"); ChartArea CA = cha

我正在创建一个使用图表的windows窗体应用程序。我想修改图表

如何在屏幕截图中编辑图表区背景色白色 如何对每个条应用不同的颜色。 如何格式化Y轴标签需要将文件扩展名与左端对齐,将整数值与右端对齐 这是我当前的屏幕截图

需要像这样更新我的屏幕吗

可以这样对齐标签吗

以下是一个例子:

要设置图表样式,请使用以下命令:

// prepare:
chart1.Series.Clear();
Series S1 = chart1.Series.Add("S1");
ChartArea CA = chart1.ChartAreas[0];

// style type, font, color, axes
S1.ChartType = SeriesChartType.Bar;
CA.BackColor = Color.AliceBlue;
chart1.BackColor = CA.BackColor;
Font f = new Font("Consolas", 10f);
CA.AxisX.LabelStyle.Font = f;

S1.BackGradientStyle = GradientStyle.TopBottom;
CA.AxisX.MajorGrid.Enabled = false;
CA.AxisX.MajorTickMark.Enabled = false;
CA.AxisX.LineColor = Color.Transparent;

CA.AxisY.Enabled = AxisEnabled.False;
CA.AxisY.MajorGrid.Enabled = false;
CA.AxisY.MajorTickMark.Enabled = false;
要为单个数据点着色,必须设置其颜色:

要创建标签,可以创建字符串,并在添加点时将其用作伪X值:

string label = string.Format("{0,-11}{1, 7:0.0}%{2,8:##0.0}GB  ",
                t.Item1, t.Item2 * 100d / total, t.Item2) + "\u2001\u2001";
int idx = S1.Points.AddXY(label, t.Item2);
这里我使用一个元组来保存数据。您需要根据您的数据源对其进行调整。注意我是如何从总数中计算百分比的

以下是我用于示例数据的完整代码:

List<Tuple<string, double>> data = new List<Tuple<string, double>>()
{
    new Tuple<string, double>( "0-1 months", 4 ),
    new Tuple<string, double>( "2-3 months", 14 ),
    new Tuple<string, double>( "4-11 months", 44 ),
    new Tuple<string, double>( "1-2 years", 23 ),
    new Tuple<string, double>( "3-5 years", 3 ),
    new Tuple<string, double>( "> 5 years", 100 ),

};

double total = data.Sum(x => x.Item2);

foreach (Tuple<string, double> t in data)
{
    string label = string.Format("{0,-11}{1, 7:0.0}%{2,8:##0.0}GB",
                   t.Item1, t.Item2 * 100d / total, t.Item2) + "\u2001\u2001";
    int i = S1.Points.AddXY(label, t.Item2);
    S1.Points[i].Font = f;
}

我又添加了一个屏幕截图,你能帮我格式化这样的标签吗..我已经添加了一些关于如何处理第二张图片的提示。感谢更新。请提供customLabels的示例代码
List<Tuple<string, double>> data = new List<Tuple<string, double>>()
{
    new Tuple<string, double>( "0-1 months", 4 ),
    new Tuple<string, double>( "2-3 months", 14 ),
    new Tuple<string, double>( "4-11 months", 44 ),
    new Tuple<string, double>( "1-2 years", 23 ),
    new Tuple<string, double>( "3-5 years", 3 ),
    new Tuple<string, double>( "> 5 years", 100 ),

};

double total = data.Sum(x => x.Item2);

foreach (Tuple<string, double> t in data)
{
    string label = string.Format("{0,-11}{1, 7:0.0}%{2,8:##0.0}GB",
                   t.Item1, t.Item2 * 100d / total, t.Item2) + "\u2001\u2001";
    int i = S1.Points.AddXY(label, t.Item2);
    S1.Points[i].Font = f;
}
    chart1.Series.Clear();
    Series S1 = chart1.Series.Add("S1");
    S1.ChartType = SeriesChartType.Column;
    ChartArea CA = chart1.ChartAreas[0];
    chart1.Legends.Clear();

    CA.BackColor = Color.AliceBlue;
    chart1.BackColor = Color.AliceBlue;
    Font f = new Font("Consolas", 9f);

    CA.AxisX.LabelStyle.Font = f;

    S1.BackGradientStyle = GradientStyle.LeftRight;
    CA.AxisX.MajorGrid.Enabled = false;
    CA.AxisX.MajorTickMark.Enabled = false;
    CA.AxisX.LineColor = Color.Transparent;

    CA.AxisY.Enabled = AxisEnabled.False;
    CA.AxisY.MajorGrid.Enabled = false;
    CA.AxisY.MajorTickMark.Enabled = false;

    CA.Position.X = 0f;

    List<Tuple<string, double>> data = new List<Tuple<string, double>>()
    {
        new Tuple<string, double>( "0-1 months", 4 ),
        new Tuple<string, double>( "2-3 months", 14 ),
        new Tuple<string, double>( "4-11 months", 44 ),
        new Tuple<string, double>( "1-2 years", 23 ),
        new Tuple<string, double>( "3-5 years", 3 ),
        new Tuple<string, double>( "> 5 years", 100 ),

    };

    double total = data.Sum(x => x.Item2);

    foreach (Tuple<string, double> t in data)
    {
        string label1 = string.Format("{0}\n{1:0.0}%", t.Item1, t.Item2 * 100d / total);
        string label2 = string.Format("\n\n{0:##0.0}GB", t.Item2);
        int i = S1.Points.AddXY(S1.Points.Count, t.Item2);
        S1.Points[i].Font = f;

        DataPoint dp = S1.Points[i];
        int v = (int)dp.YValues[0];
        CustomLabel cl = new CustomLabel();
        cl.Text = label1;
        cl.FromPosition = i - 0.5f;
        cl.ToPosition = i + 0.5f;

        CustomLabel cl2 = new CustomLabel();
        cl2.Text = label2;
        cl2.FromPosition = i -0.5f;
        cl2.ToPosition = i + 0.5f;

        cl2.ForeColor = Color.Green;
        CA.AxisX.CustomLabels.Add(cl);
        CA.AxisX.CustomLabels.Add(cl2);

    }
    S1.Points[0].Color = Color.YellowGreen;
    S1.Points[1].Color = Color.YellowGreen;