带有未缩放y值的图表

时间:2017-09-25 23:23:01

标签: c# winforms graph charts mschart

我试图找出是否可以在winforms C#应用程序中找到任何存在的图表。

我有几个整数输入a,b,c ...并且在处理结束时我得到的结果具有宽范围的值,如12,342,445879等。

在图表上,我想只看到从较高尺寸到较低尺寸的层次结构,而在较高和较低线端之间没有相等的比例距离。每个输入只需向下弯曲的阶梯即可。

因此,如果已经存在某种类型的图表工具,则需要两件事情,即从较高到较低的序列排序,其中名称附加到行,而非缩放值以彼此之间的比率显示。

例如我有输入:

int a = 12989;
int b = 324;
int c = 23;
int d = 12;
int e = 3;

和第二个过程结果:

int a = 4;
int b = 25;
int c = 1;
int d = 4;
int e = 14;

我试图在VS列表中使用不同的图表,

 private void Size(int a, int b)
    {
        this.chart1.Series["Series1"].Points.AddXY("a1", a);
        this.chart1.Series["Series1"].Points.AddXY("a2", b);
    }

但似乎我需要不同的东西。

这是理想的结果:

unscaled columns

1 个答案:

答案 0 :(得分:2)

是的,这是可能的。

对于x值,实际上有Series属性IsXValueIndexed来强制执行未缩放的显示。但是,对于y值没有这样的东西。

(原因可能是未缩放的y值不是真正有用,因为他们可以误导用户关于数据..(..可能或者可能不适用于x值; x值包含,例如,邮政编码或其他ID 显示为未缩放!)

要解决此问题,您需要将x和y值设置为计数值,并set Labels 明确DataPoint为实际值你有。

示例:

enter image description here

// create an odered list of data:
List<double> data = new List<double>();
for (int i = 0; i < 12; i++) data.Add(rnd.Next(100) * rnd.Next(i * 5));
data = data.OrderByDescending(x => x).ToList();

// now add with dummy x and y-values:
Series s = chart1.Series[0];
for (int i = 0; i < data.Count; i++)
{
    int p = s.Points.AddXY(i, data.Count - i);   // dummy values
    DataPoint dp = s.Points[p];
    dp.Label = data[i] +"";        // real value, formatted
    dp.Tag= data[i];              // real value

}

要摆脱无法显示任何吝啬值的轴,请禁用它们:

chart1.ChartAreas[0].AxisX.Enabled = AxisEnabled.False;
chart1.ChartAreas[0].AxisY.Enabled = AxisEnabled.False;

更多造型:

s.SetCustomProperty("PixelPointWidth","15");
s.Color = Color.DarkSlateGray;

请注意,由于y值实际上只是假人,如果您需要访问它们,则必须使用Labels并将它们从字符串转换为数字类型。另请注意,如果它们是doublefloats,则这些字符串将非常长或格式化为短字符串。要保留实际值,您可以将这些值另外存储在每个Tag的{​​{1}}字段中。