2009-03-20 3 views
7

Tôi có một StackedBar hiển thị 5 giá trị cho mỗi thanh, với giá trị dữ liệu được hiển thị ở giữa mỗi khối. Càng xa càng tốt. Tuy nhiên, khi giá trị bằng 0, giá trị vẫn đang được hiển thị, điều này rất lộn xộn khi có nhiều số không.Cách ẩn nhãn datapoint khi giá trị bằng không trong một StackedBar

Tôi muốn có thể ẩn nhãn cho số không. Làm thế nào tôi có thể làm điều đó?

(Tôi giả sử tôi có thể thực hiện theo cách dài bằng cách đọc dữ liệu theo từng hàng và tạo biểu đồ theo từng bước, nhưng tôi muốn có thể chỉ cần ném kết quả truy vấn ở kiểm soát) .

Trả lời

5

Bạn có thể ẩn nhãn trong trường hợp Customize:

protected void SummaryChart_Customize(object sender, EventArgs e) 
{ 
    //hide label value if zero 
    foreach (System.Web.UI.DataVisualization.Charting.Series series in SummaryChart.Series) 
    { 
     foreach (System.Web.UI.DataVisualization.Charting.DataPoint point in series.Points) 
     { 
      if (point.YValues.Length > 0 && (double)point.YValues.GetValue(0) == 0) 
      { 
       point.IsValueShownAsLabel = false; 
      } 
      else 
      { 
       point.IsValueShownAsLabel = true; 
      } 
     } 
    } 
} 
2

Sử dụng một định dạng số tùy chỉnh mà ngăn chặn số không, một cái gì đó giống như

chung ;;;

0,0% ;;;

$ #, ## 0.00 ;;;

0

tôi đã cùng một vấn đề và tôi giải quyết nó bằng cách sử dụng định dạng số sau

[=0]"";0.0% 

Phần thứ nhất:

[=0]"" 

có nghĩa là: nếu giá trị tương đương với số không nó sẽ hiển thị một chuỗi rỗng

Phần thứ hai:

0.0% 

Trong trường hợp cụ thể này có nghĩa là tất cả các giá trị khác sẽ được hiển thị dưới dạng phần trăm với một số thập phân. Bất kỳ định dạng số nào cũng có thể được sử dụng làm phần thứ hai.

[=0];General (Standard in some localized versions of Excel) 

có thể được sử dụng để sử dụng định dạng mặc định.

Sử dụng VBA nó sẽ là: giải pháp

Dim area as range 
'The data area for the chart' 
set area = Sheet1.range("A1:B3") 
area.NumberFormat = "[=0];General" 
4

Jim không làm việc cho tôi, nhưng đây là cách tôi đã làm nó, cách sử dụng một số mã của mình - nhờ Jim!

  1. Trong thiết kế, hãy thiết lập phần tử EmptyPointStyle trong phần tử Series tương ứng. Điều này sẽ đặt giá trị không được hiển thị dưới dạng nhãn và không được đặt trong chú giải.
  2. Trong mã sau, hãy sử dụng sự kiện DataBound hoặc Tùy chỉnh để ẩn các điểm bằng cách đặt thuộc tính IsEmpty thành True.

Code:

  1. Trong ASPX:

    <Series> 
         <asp:Series ChartType="Pie" Name="Series1" ..etc....> 
          <EmptyPointStyle IsValueShownAsLabel="false" IsVisibleInLegend="false" />    
         </asp:Series> 
        </Series> 
    
  2. Trong Bộ luật đằng sau (vâng sử dụng VB ở đây!):

(Lưu ý:. Tôi phải nổ tất cả các điểm trên biểu đồ Pie đặc biệt này là tốt, mà không liên quan đến câu hỏi này, nhưng tôi rời nó vào, trong trường hợp nó sẽ giúp người)

Protected Sub Chart1_DataBound(sender As Object, e As EventArgs) Handles Chart1.DataBound 
    Dim chart As Chart = TryCast(sender, Chart) 

    If chart IsNot Nothing Then 
     ' Explode all points 
     For Each p As DataPoint In chart.Series(0).Points 
      p.CustomProperties = "Exploded=true" 

      ' Remove zero points 
      If p.YValues.Length > 0 AndAlso p.YValues.GetValue(0) = 0 Then 
       p.IsEmpty = True 
      End If 
     Next 
    End If 
End Sub 
+0

Tôi đã đánh dấu này lên vì chuyển đổi sang C# point.IsEmpty = true là chìa khóa để thành công, điều này là cần thiết khi bạn cần point.IsValueShownAsLabel = đúng và sau đó thiết lập Series [chartSeries] .LabelFormat = "mm: ss"; – peterincumbria

3

này làm việc một cách hoàn hảo đối với tôi

foreach (System.Web.UI.DataVisualization.Charting.Series series in SummaryChart.Series) 
    { 
    foreach (System.Web.UI.DataVisualization.Charting.DataPoint point in series.Points) 
    { 
     if (point.YValues.Length > 0 && (double)point.YValues.GetValue(0) == 0) 
     { 
       point.LegendText = point.AxisLabel;//In case you have legend 
       point.AxisLabel = string.Empty; 
       point.Label = string.Empty; 
     } 
    } 
    } 
1

này đang làm việc cho tôi

For Each s As Series In Chart1.Series 
    For Each dp As DataPoint In s.Points 
     If dp.YValues(0) = 0 Then 
      dp.IsEmpty = True 
     End If 
    Next 
Next 
2

này đã làm việc một cách chính xác (Tôi đã thử nghiệm nó cho chỉ có một loạt)

foreach (System.Windows.Forms.DataVisualization.Charting.DataPoint point in chartShow.Series["S3"].Points) 
{ 
    if (point.YValues.Length > 0 && (double)point.YValues.GetValue(0) == 0) 
    { 
      point.IsEmpty = true; 
    } 
    else 
    { 
      point.IsEmpty = false; 
    } 
}