You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

基于.NET 8的WPF LiveCharts 2实时图表:轴线与标签被截断

问题:LiveCharts 2 折线图轴线、刻度标签及标题被截断

图表数据绘制和实时更新功能正常,但轴线、刻度标签和标题被截断或完全不可见。已尝试添加内边距、设置DrawMargin、使用轴标题及带内边距的DrawMarginFrame,问题仍未解决。

环境

-.NET 8 WPF应用
-LiveCharts 2(LiveChartsCore

相关代码

XAML代码

<Grid Margin="654,26,10,276">
    <Border BorderBrush="Black" BorderThickness="1" Margin="10">
        <lvc:CartesianChart
             x:Name="MyChart"
             Series="{Binding MySeries}"
             XAxes="{Binding XAxes}"
             YAxes="{Binding YAxes}"
             LegendPosition="Top"
             Margin="10" Padding="20" />
    </Border>
</Grid>

C#全局声明

public ObservableCollection<ObservablePoint> ProcessPoints { get; set; } = new();
public ISeries[] MySeries { get; set; }
public LiveChartsCore.SkiaSharpView.Axis[] XAxes { get; set; }
public LiveChartsCore.SkiaSharpView.Axis[] YAxes { get; set; }

图表初始化代码

public void InitializeChart()
{
    MySeries = new ISeries[]
        {
            new LineSeries<ObservablePoint>
                {
                    Values = ProcessPoints,
                    GeometrySize = 5,
                    Fill = null,
                    Stroke = new SolidColorPaint(SKColors.DodgerBlue, 2)
                }
        };

    XAxes = new LiveChartsCore.SkiaSharpView.Axis[]
        {
            new LiveChartsCore.SkiaSharpView.Axis
                {
                    Labeler = value => value.ToString("0"),
                    TextSize = 14,
                    Name = "Time (s)",               
                    ShowSeparatorLines = true,
                }
        };

    YAxes = new LiveChartsCore.SkiaSharpView.Axis[]
        {
            new LiveChartsCore.SkiaSharpView.Axis
                {
                    Labeler = value => value.ToString("0"),
                    TextSize = 14,
                    Name = "Temperature (°C)",       
                    ShowSeparatorLines = true
                }
        };
}

解决办法

  1. 移除Grid的固定Margin
    你给Grid设置的Margin="654,26,10,276"极大压缩了图表的可用空间,是截断问题的核心原因。改成自适应边距:
<Grid Margin="10">
  1. 为轴添加内边距
    在轴的初始化代码中加入Padding属性,给标签和标题预留显示空间:
// X轴配置调整
new LiveChartsCore.SkiaSharpView.Axis
{
    // 保留原有属性
    Padding = new LiveChartsCore.Drawing.Padding(0, 10, 0, 0) // 给X轴标题下方留空间
}

// Y轴配置调整
new LiveChartsCore.SkiaSharpView.Axis
{
    // 保留原有属性
    Padding = new LiveChartsCore.Drawing.Padding(0, 0, 10, 0) // 给Y轴标题右侧留空间
}
  1. 设置图表的DrawMargin
    直接给CartesianChart指定绘图区域的边距,强制留出空间给轴线和标签:
<lvc:CartesianChart
     x:Name="MyChart"
     Series="{Binding MySeries}"
     XAxes="{Binding XAxes}"
     YAxes="{Binding YAxes}"
     LegendPosition="Top"
     Margin="10" 
     Padding="20"
     DrawMargin="50, 50, 50, 50" /> <!-- 顺序:上、右、下、左 -->
  1. 检查父容器裁剪设置
    如果Grid嵌套在其他容器中,查看是否开启了ClipToBounds="True",若有则改为False,避免内容被容器边缘裁剪。

优先处理Grid的Margin问题,这是最可能解决问题的关键步骤。

内容的提问来源于stack exchange,提问作者user31020390

火山引擎 最新活动