mirror of
https://github.com/azaion/annotations.git
synced 2026-04-22 10:56:31 +00:00
better view for class distribution
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user