2017-09-25 63 views
1

我想弄清楚我是否可以在Winforms C#应用程序中找到任何存在的图表。具有未缩放y值的图表

我有几个整数输入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

+0

你为什么reverty我澄清descripition ???正确的图像几乎没有希望的结果?!?! – TaW

回答

2

是的,这是可能的。

对于x值,实际上有一个Series属性IsXValueIndexed来强制执行未缩放的显示。尽管如此,y值没有这样的东西。

(其原因是可能是未缩放的y值是不是真的有用,因为他们将无疑误导数据的用户 ..(..其可以是或可以不是x值的真;包含,比如说,邮政编码或其他ID x值应显示未缩放!))

要解决,你需要设置x和y的值来计数值和set每个DataPoint明确的Labels到您的实际值。

例子:

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 

} 

为了摆脱轴,这不能显示AY meanigful值,禁用它们:

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这些字符串要么是非常长或格式化以一个简短的字符串。为了保持你可以在每个DataPointTag场额外存储这些实际值..