2009-03-20 22 views
7

棒グラフごとに5つの値が表示され、データ値が各ブロックの中央に表示されるStackedBarがあります。ここまでは順調ですね。しかし、値がゼロの場合、値はまだ表示されていますが、ゼロが多い場合は面倒です。StackedBarで値が0のときにデータポイントラベルを非表示にする方法

ゼロのラベルを非表示にしたいと考えています。どうやってやるの?

(データを行単位で読み込み、グラフを段階的に作成することでこれを行うことができますが、クエリ結果をコントロールにスローすることができます) 。

答えて

5

あなたはカスタマイズイベントでラベルを非表示にすることができます:

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

一般的のようなものがゼロを抑制するカスタム数値形式を使用してください;;;

0.0%;;;

$#、## 0.00 ;;;

0

私は同じ問題を抱えていたと私は最初の部分、次の数値形式

[=0]"";0.0% 

を使用してそれを解決:値がゼロに等しい場合、それが表示されるはず:

[=0]"" 

があることを意味空の文字列

第二部:

0.0% 

この特定のケースでは、他のすべての値をパーセントで1桁の10進数で表示する必要があります。 2番目の部分としては、任意の数値形式を使用できます。

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

デフォルトのフォーマットを使用することができます。

それは次のようになりVBAを使用して:ここ

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

ジムのソリューションは、私のために動作しませんでしたが、私は彼のコードの一部を利用して、それをやった方法です - おかげでジム!

  1. Designerで、該当するSeries要素の下にEmptyPointStyle要素を設定します。これは、ラベルとして表示されず、凡例に表示されないように値を設定する必要があります。
  2. コードビハインドで、DataBoundイベントまたはCustomizeイベントを使用して、IsEmptyプロパティをTrueに設定してゼロポイントを非表示にします。

コード:ASPXで

  1. :背後にあるコードで

    <Series> 
         <asp:Series ChartType="Pie" Name="Series1" ..etc....> 
          <EmptyPointStyle IsValueShownAsLabel="false" IsVisibleInLegend="false" />    
         </asp:Series> 
        </Series> 
    
  2. (うん、ここでVBを使用して!):

(注:私はこの質問には関係ありませんこれは、同様に、この特定の円グラフ上のすべての点を爆発する必要がありますが、それが誰かを助け場合、私は、それを左)

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

を働きましたtrueを選択し、Series [chartSeries] .LabelFormat = "mm:ss"を設定します。 – peterincumbria

3

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

このために完全にこの作品は私

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

これは私が真= C#point.IsEmptyに変換が成功への鍵ですので、あなたがpoint.IsValueShownAsLabelを必要とするとき、これは=必要とされ、これをマークアップされている(私は唯一のシリーズのためにそれをテストした)正しく

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; 
    } 
} 
関連する問題