ScottPlot设置绘图样式

背景颜色

可以单独控制整个图窗或仅数据区域的背景颜色。使用深色图形背景时,可能需要将轴配置为使用浅色

  

Styling.cs

// setup a plot with sample data
WpfPlot1.Plot.Add.Signal(Generate.Sin(51));
WpfPlot1.Plot.Add.Signal(Generate.Cos(51));
WpfPlot1.Plot.XLabel("Horizontal Axis");
WpfPlot1.Plot.YLabel("Vertical Axis");

// some items must be styled directly
WpfPlot1.Plot.FigureBackground.Color = Colors.Navy;
WpfPlot1.Plot.DataBackground.Color = Colors.Navy.Darken(0.1);
WpfPlot1.Plot.Grid.MajorLineColor = Colors.Navy.Lighten(0.1);

// some items have helper methods to configure multiple properties at once
WpfPlot1.Plot.Axes.Color(Colors.Navy.Lighten(0.8));

WpfPlot1.Refresh();


Axis 定制

轴标签、刻度线和框架都可以自定义。

  

Styling.cs

WpfPlot1.Plot.Add.Signal(Generate.Sin(51));
WpfPlot1.Plot.Add.Signal(Generate.Cos(51));

WpfPlot1.Plot.Axes.Title.Label.Text = "Plot Title";
WpfPlot1.Plot.Axes.Title.Label.ForeColor = Colors.RebeccaPurple;
WpfPlot1.Plot.Axes.Title.Label.FontSize = 32;
WpfPlot1.Plot.Axes.Title.Label.FontName = Fonts.Serif;
WpfPlot1.Plot.Axes.Title.Label.Rotation = -5;
WpfPlot1.Plot.Axes.Title.Label.Bold = false;

WpfPlot1.Plot.Axes.Left.Label.Text = "Vertical Axis";
WpfPlot1.Plot.Axes.Left.Label.ForeColor = Colors.Magenta;
WpfPlot1.Plot.Axes.Left.Label.Italic = true;

WpfPlot1.Plot.Axes.Bottom.Label.Text = "Horizontal Axis";
WpfPlot1.Plot.Axes.Bottom.Label.Bold = false;
WpfPlot1.Plot.Axes.Bottom.Label.FontName = Fonts.Monospace;

WpfPlot1.Plot.Axes.Bottom.MajorTickStyle.Length = 10;
WpfPlot1.Plot.Axes.Bottom.MajorTickStyle.Width = 3;
WpfPlot1.Plot.Axes.Bottom.MajorTickStyle.Color = Colors.Magenta;
WpfPlot1.Plot.Axes.Bottom.MinorTickStyle.Length = 5;
WpfPlot1.Plot.Axes.Bottom.MinorTickStyle.Width = 0.5f;
WpfPlot1.Plot.Axes.Bottom.MinorTickStyle.Color = Colors.Green;
WpfPlot1.Plot.Axes.Bottom.FrameLineStyle.Color = Colors.Blue;
WpfPlot1.Plot.Axes.Bottom.FrameLineStyle.Width = 3;

WpfPlot1.Plot.Axes.Right.FrameLineStyle.Width = 0;

WpfPlot1.Refresh();


调色板

调色板是一组颜色,Plot 的调色板定义了添加新绘图表时要使用的默认颜色。ScottPlot 附带许多标准调色板,但用户也可以创建自己的调色板。

  

Styling.cs

// change the default palette used when adding new plottables
WpfPlot1.Plot.Add.Palette = new ScottPlot.Palettes.Nord();

for (int i = 0; i < 5; i++)
{
    double[] data = Generate.Sin(100, phase: -i / 20.0f);
    var sig = WpfPlot1.Plot.Add.Signal(data);
    sig.LineWidth = 3;
}

WpfPlot1.Refresh();


箭头形状

有许多标准箭头形状可供选择

  

Styling.cs

ArrowShape[] arrowShapes = Enum.GetValues<ArrowShape>().ToArray();

for (int i = 0; i < arrowShapes.Length; i++)
{
    Coordinates arrowTip = new(0, -i);
    Coordinates arrowBase = arrowTip.WithDelta(1, 0);

    var arrow = WpfPlot1.Plot.Add.Arrow(arrowBase, arrowTip);
    arrow.ArrowShape = arrowShapes[i].GetShape();

    var txt = WpfPlot1.Plot.Add.Text(arrowShapes[i].ToString(), arrowBase.WithDelta(.1, 0));
    txt.LabelFontColor = arrow.ArrowLineColor;
    txt.LabelAlignment = Alignment.MiddleLeft;
    txt.LabelFontSize = 18;
}

WpfPlot1.Plot.Axes.SetLimits(-1, 3, -arrowShapes.Length, 1);
WpfPlot1.Plot.HideGrid();

WpfPlot1.Refresh();


线条样式

许多绘图类型都有可自定义的 LineStyle。

  

Styling.cs

List<LinePattern> patterns = [];
patterns.AddRange(LinePattern.GetAllPatterns());
patterns.Add(new([2, 2, 5, 10], 0, "Custom"));

for (int i = 0; i < patterns.Count; i++)
{
    LinePattern pattern = patterns[i];

    var line = WpfPlot1.Plot.Add.Line(0, -i, 1, -i);
    line.LinePattern = pattern;
    line.LineWidth = 2;
    line.Color = Colors.Black;

    var txt = WpfPlot1.Plot.Add.Text(patterns[i].Name, 1.1, -i);
    txt.LabelFontSize = 18;
    txt.LabelBold = true;
    txt.LabelFontColor = Colors.Black;
    txt.LabelAlignment = Alignment.MiddleLeft;
}

WpfPlot1.Plot.Axes.Margins(right: 1);
WpfPlot1.Plot.HideGrid();
WpfPlot1.Plot.Layout.Frameless();

WpfPlot1.Plot.ShowLegend();

WpfPlot1.Refresh();


比例因子

通过调整 ScaleFactor 属性,可以放大或缩小图像的所有组件的大小。这对于在启用显示缩放的情况下创建在高 DPI 显示器上看起来不错的图像非常有用。

  

Styling.cs

WpfPlot1.Plot.ScaleFactor = 2;
WpfPlot1.Plot.Add.Signal(Generate.Sin());
WpfPlot1.Plot.Add.Signal(Generate.Cos());

WpfPlot1.Refresh();


发际线模式

发际线模式允许轴帧、刻度线和网格线始终呈现单个像素宽,而不管比例因子如何。启用细线模式,以便在使用大比例因子时使交互式绘图感觉更平滑。

  

Styling.cs

WpfPlot1.Plot.ScaleFactor = 2;
WpfPlot1.Plot.Add.Signal(Generate.Sin());
WpfPlot1.Plot.Add.Signal(Generate.Cos());

WpfPlot1.Plot.Axes.Hairline(true);

WpfPlot1.Refresh();


深色模式

可以通过将主要绘图分量的颜色设置为与深色主题一致的颜色,使用深色模式创建绘图。

  

Styling.cs

// set the color palette used when coloring new items added to the plot
WpfPlot1.Plot.Add.Palette = new ScottPlot.Palettes.Penumbra();

// add things to the plot
for (int i = 0; i < 5; i++)
{
    var sig = WpfPlot1.Plot.Add.Signal(Generate.Sin(51, phase: -.05 * i));
    sig.LineWidth = 3;
    sig.LegendText = $"Line {i + 1}";
}
WpfPlot1.Plot.XLabel("Horizontal Axis");
WpfPlot1.Plot.YLabel("Vertical Axis");
WpfPlot1.Plot.Title("ScottPlot 5 in Dark Mode");
WpfPlot1.Plot.ShowLegend();

// change figure colors
WpfPlot1.Plot.FigureBackground.Color = Color.FromHex("#181818");
WpfPlot1.Plot.DataBackground.Color = Color.FromHex("#1f1f1f");

// change axis and grid colors
WpfPlot1.Plot.Axes.Color(Color.FromHex("#d7d7d7"));
WpfPlot1.Plot.Grid.MajorLineColor = Color.FromHex("#404040");

// change legend colors
WpfPlot1.Plot.Legend.BackgroundColor = Color.FromHex("#404040");
WpfPlot1.Plot.Legend.FontColor = Color.FromHex("#d7d7d7");
WpfPlot1.Plot.Legend.OutlineColor = Color.FromHex("#d7d7d7");

WpfPlot1.Refresh();


颜色图步骤

颜色图可用于生成可应用于可绘图对象的离散颜色集合。

  

Styling.cs

IColormap colormap = new ScottPlot.Colormaps.Turbo();

for (int count = 1; count < 10; count++)
{
    double[] xs = Generate.Consecutive(count);
    double[] ys = Generate.Repeating(count, count);
    Color[] colors = colormap.GetColors(count);

    for (int i = 0; i < count; i++)
    {
        var circle = WpfPlot1.Plot.Add.Circle(xs[i], ys[i], 0.45);
        circle.FillColor = colors[i];
        circle.LineWidth = 0;
    }
}

WpfPlot1.Plot.YLabel("number of colors");

WpfPlot1.Refresh();


颜色的色彩映射表渐变

颜色图可以创建为颜色集合之间的渐变。

  

Styling.cs

Color[] colors = [Colors.Red, Colors.Magenta, Colors.DarkGreen];
IColormap myColormap = Colormap.FromColors(colors);

double[] xs = Generate.Consecutive(51);
double[] ys = Generate.Sin(51);
var markers = WpfPlot1.Plot.Add.Markers(xs, ys);
markers.Colormap = myColormap;

WpfPlot1.Refresh();


手绘线条样式

启用手绘线条样式可以创建模拟 XKCD 样式图表的图表,这些图表使用波浪线来获得喜剧效果。

  

Styling.cs

double[] xs = Generate.Consecutive(100);
double[] values1 = Generate.Sigmoidal(xs.Length, -1, 2);

// create a hand drawn scatter plot
var sp = WpfPlot1.Plot.Add.ScatterLine(xs, values1);
sp.LineStyle.HandDrawn = true;
sp.LineStyle.HandDrawnJitter = 2;
sp.LineWidth = 3;
sp.LineColor = Colors.Black;

// configure axis frames to appear hand drawn
WpfPlot1.Plot.HideGrid();
WpfPlot1.Plot.Axes.GetAxes().ToList().ForEach(x => x.FrameLineStyle.HandDrawn = true);

// use a comedic font for axis titles and tick labels
WpfPlot1.Plot.Title("Answers");
WpfPlot1.Plot.YLabel("Utility");
WpfPlot1.Plot.XLabel("Time Taken to Respond");
WpfPlot1.Plot.Axes.Title.Label.FontName = "Comic Sans MS";
WpfPlot1.Plot.Axes.Left.Label.FontName = "Comic Sans MS";
WpfPlot1.Plot.Axes.Bottom.Label.FontName = "Comic Sans MS";
WpfPlot1.Plot.Axes.Bottom.TickLabelStyle.FontName = "Comic Sans MS";

// use manually placed horizontal axis ticks
WpfPlot1.Plot.Axes.Left.TickGenerator = new ScottPlot.TickGenerators.EmptyTickGenerator();
WpfPlot1.Plot.Axes.Bottom.SetTicks([10, 50, 75], ["Minutes", "Days", "Weeks"]);

WpfPlot1.Refresh();


标题对齐

默认情况下,标题在数据区域上居中,但有一个标志允许用户将其相对于图窗居中

  

Styling.cs

WpfPlot1.Plot.Add.Signal(Generate.Sin(51, mult: 1e9));
WpfPlot1.Plot.Title("This title is centered in the figure");
WpfPlot1.Plot.Axes.Title.FullFigureCenter = true;

WpfPlot1.Refresh();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

code_shenbing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值