我有一个 StackedBar,每条显示 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;
}
}
}
}
吉姆的解决方案对我不起作用,但我是这样做的,利用他的一些代码 - 谢谢吉姆!
代码:
在 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
这对我来说非常适合
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;
}
}
}
使用抑制零的自定义数字格式,例如
一般的;;;
0.0%;;;
$#,##0.00;;;
这工作正常(我只测试了一个系列)
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;
}
}
这对我有用
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
我遇到了同样的问题,我使用以下数字格式解决了它
[=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"