better view for class distribution

This commit is contained in:
Alex Bezdieniezhnykh
2025-05-27 13:26:27 +03:00
parent e957f1192a
commit 34ea821fb3
15 changed files with 311 additions and 217 deletions
+13 -32
View File
@@ -6,6 +6,7 @@ using Azaion.Common.Database;
using Azaion.Common.DTO;
using Azaion.Common.DTO.Config;
using Azaion.Common.Events;
using Azaion.Common.Extensions;
using Azaion.Common.Services;
using Azaion.CommonSecurity.DTO;
using Azaion.CommonSecurity.Services;
@@ -13,8 +14,6 @@ using LinqToDB;
using MediatR;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using ScottPlot;
using Color = ScottPlot.Color;
namespace Azaion.Dataset;
@@ -140,7 +139,7 @@ public partial class DatasetExplorer
ExplorerEditor.CurrentAnnClass = LvClasses.CurrentDetectionClass ?? _annotationConfig.DetectionClasses.First();
await ReloadThumbnails();
await LoadClassDistribution();
LoadClassDistribution();
DataContext = this;
}
@@ -152,47 +151,29 @@ public partial class DatasetExplorer
_annotationsDict[-1][annotation.Name] = annotation;
}
private async Task LoadClassDistribution()
private void LoadClassDistribution()
{
var data = _annotationsDict
.Where(x => x.Key != -1)
.Select(gr => new
.OrderBy(x => x.Key)
.Select(gr => new ClusterDistribution
{
gr.Key,
_annotationConfig.DetectionClassesDict[gr.Key].ShortName,
_annotationConfig.DetectionClassesDict[gr.Key].Color,
Label = $"{_annotationConfig.DetectionClassesDict[gr.Key].UIName}: {gr.Value.Count}",
Color = _annotationConfig.DetectionClassesDict[gr.Key].Color,
ClassCount = gr.Value.Count
})
.Where(x => x.ClassCount > 0)
.ToList();
var foregroundColor = Color.FromColor(System.Drawing.Color.Black);
var maxClassCount = Math.Max(1, data.Max(x => x.ClassCount));
var bars = data.Select(x => new Bar
foreach (var cl in data)
{
Orientation = Orientation.Horizontal,
Position = -1.5 * x.Key + 1,
Label = x.ClassCount > 200 ? x.ClassCount.ToString() : "",
FillColor = new Color(x.Color.R, x.Color.G, x.Color.B, x.Color.A),
Value = x.ClassCount,
CenterLabel = true,
LabelOffset = 10
}).ToList();
ClassDistribution.Plot.Add.Bars(bars);
foreach (var x in data)
{
var label = ClassDistribution.Plot.Add.Text(x.ShortName, 50, -1.5 * x.Key + 1.1);
label.LabelFontColor = foregroundColor;
label.LabelFontSize = 18;
cl.Color = cl.Color.CreateTransparent(150);
cl.BarWidth = Math.Clamp(cl.ClassCount / (double)maxClassCount, 0, 1);
}
ClassDistribution.Plot.Axes.AutoScale();
ClassDistribution.Plot.HideAxesAndGrid();
ClassDistribution.Plot.FigureBackground.Color = new("#888888");
ClassDistribution.Refresh();
await Task.CompletedTask;
ClassDistributionPlot.Items = data;
}
private async void RefreshThumbnailsBtnClick(object sender, RoutedEventArgs e)