2015-09-06 138 views
-2

我正在使用System.Windows.Forms.DataVisualization.Charting。 现在我有一个这样的柱形图。图表列网格

Image

但我需要的电网在一边,这样的列。

Image

我该怎么办呢?


我的数据来自DataGridView,所以我的代码看起来像这样。

var ser = chart1.Series.Add("ana"); 
ser.IsValueShownAsLabel = true; 
ser.IsVisibleInLegend = false; 
ser.ChartType = SeriesChartType.Column; 

//X value is string 
ser.XValueMember = dataGridView1.Columns[0].DataPropertyName; 

//Y value is int 
ser.YValueMembers = dataGridView1.Columns[1].DataPropertyName; 

chart1.DataSource = dataGridView1.DataSource; 

而且数据的DataGridView很简单。

 
------------- 
|Month|Sales| 
------------- 
| Jan | 17 | 
------------- 
| Feb | 28 | 
------------- 
| Mar | 19 | 
------------- 
+0

更具体 – Arash

+0

投入一些精力,如果面对任何问题,然后张贴在这里。 –

+0

您应该向我们展示如何添加'DataPoints'!他们的“X值”和“X值类型”是什么? – TaW

回答

2

GridLinesDataPointsLabelsGridLines,但..

您可以设置IntervalMinimumX-Axis分开来调整它们:

enter image description here

但有一些额外的需要注意的..

// get a reference 
ChartArea chartArea1 = chart1.ChartAreas[0]; 

// don't start at 0 
chartArea1.AxisX.IsStartedFromZero = false; 

// pick your interval 
double interval = 1D; 
chartArea1.AxisX.MajorTickMark.Interval = interval; 

// set minimum at the middle 
chartArea1.AxisX.Minimum = interval/2d; 

// pick a column width (optional) 
chart1.Series[0].SetCustomProperty("PixelPointWidth", "30"); 

// we want the labels to sit with the points, not the grid lines.. 
// so we add custom labels for each point ranging between the grid lines.. 
for (int i = 0; i < chart1.Series[0].Points.Count; i++) 
{ 
    DataPoint dp = chart1.Series[0].Points[i]; 
    chartArea1.AxisX.CustomLabels.Add((0.5d + i) * interval, 
             (1.5d + i) * interval, dp.XValue.ToString()); 
} 

更新:

随着更新的问题表明,你正在使用的数据绑定使用字符串作为X值。这非常方便,但违背了Chart控件的核心本质。它的所有符号,无论是X-Value还是任何Y-Values都在内部存储为双打。

随机字符串不转换为加倍而你可以方便地与字符串添加DataPointsX-Values,丑陋的问题各种各样拿出一个结果。

首先看看X-Values自己:正如我所说的,他们是双重的;当你检查它们的值时,你会看到它们全都是0.字符串值在哪里?它们被放置在标签中。

有一个问题经常发现,您现在无法访问X-Valuesvalue expressions

另一个问题是,我们现在不能给范围x-Values自定义标签。

解决方案:如果我们需要自定义标签,我们必须更改数据!

数据绑定是好的,只要确保为您的数据源添加一个数字列包含一个月份号码并将其设置为该系列的XValueMember

您可以使该列在您的DataGridView中不可见。

最后,您会希望像以前一样创建自定义标签;只需将其内容更改为从包含月份名称的字符串列中拉出即可。

下面是它看起来像在这里:

enter image description here

+0

我的不好。我更详细地更新了我的问题。我正在使用dataGridView的数据,间隔技巧似乎不起作用。 –

+0

我明白了。那么您目前没有__real__ X值。您正在使用的字符串仅用于轴标签;如果你看看创建的DataPoints的X值,你会发现__they都是0__,所以这个技巧是行不通的。我明天更新答案.. – TaW

+0

谢谢。我知道有解决方法是用AddPoint和CustomLabels.Add手动添加这些数据,但我正在寻找更好的方法来做到这一点(如果有的话)。 –