我有一个StackedBar,每条显示5个值,数据值显示在每个块的中间。到现在为止还挺好。但是,当值为零时,仍会显示该值,当存在大量零时,该值很混乱。
我希望能够将标签隐藏为零。我怎么能这样做?
(我认为我可以通过逐行读取数据并逐步构建图表来做到这一点,但我希望能够将查询结果抛出控件)。
答案 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;
}
}
}
}
答案 1 :(得分:4)
Jim的解决方案对我不起作用,但这是我如何做到的,利用他的一些代码 - 感谢Jim!
<强>代码:强>
在ASPX中:
<Series>
<asp:Series ChartType="Pie" Name="Series1" ..etc....>
<EmptyPointStyle IsValueShownAsLabel="false" IsVisibleInLegend="false" />
</asp:Series>
</Series>
在后面的代码中(在这里使用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
答案 2 :(得分: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;
}
}
}
答案 3 :(得分:2)
使用抑制零的自定义数字格式,例如
一般;;;
0.0%;;;
$#,## 0.00 ;;;
答案 4 :(得分:2)
这个工作正常(我只测试了一个系列)
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;
}
}
答案 5 :(得分: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
答案 6 :(得分:0)
我遇到了同样的问题,我使用以下数字格式解决了它
[=0]"";0.0%
第一部分:
[=0]""
表示:如果该值等于零,则应显示空字符串
第二部分:
0.0%
在此特定情况下,表示所有其他值应显示为带有一位小数的百分比。任何数字格式都可以用作第二部分。
[=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"