具有未缩放的 y 值的图表

Chart with unscaled y-values

我想知道是否可以在 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);
    }

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

这是期望的结果:

是的,这是可能的。

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

(原因可能是未缩放的 y 值不是很有用,因为它们可能会误导用户关于数据..(..对于 x 值可能是也可能不是;包含邮政编码或其他 ID 的 x 值 应该 未缩放显示!))

要解决此问题,您需要将 x 和 y 值设置为计数值,并且 set 每个 DataPointLabels 显式 到您拥有的实际值。

示例:

// 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,则这些字符串要么非常长,要么被格式化为短字符串。要保留实际值,您可以将这些值另外存储在每个 DataPoint..

Tag 字段中