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