Oxyplot 条宽
Oxyplot Bar Width
我正在使用 Oxyplot 制作条形图。有没有办法改变栏的宽度?
我找到了这个解决方案:
protected override double GetActualBarWidth()
{
var categoryAxis = this.GetCategoryAxis();
return this.ColumnWidth / (1 + categoryAxis.GapWidth) / categoryAxis.MaxWidth;
}
从这里开始:
但是我不知道怎么应用。
这是我的代码:
<ContentPage.BindingContext>
<local:MainPageViewModel></local:MainPageViewModel>
</ContentPage.BindingContext>
<oxy:PlotView Model="{Binding Model}" HeightRequest="200" />
这是我的视图模型:
public class MainPageViewModel
{
public PlotModel Model { get; set; }
public MainPageViewModel()
{
CategoryAxis xaxis = new CategoryAxis();
xaxis.Position = AxisPosition.Bottom;
xaxis.MajorGridlineStyle = LineStyle.None;
xaxis.MinorGridlineStyle = LineStyle.None;
xaxis.MinorTickSize = 0;
xaxis.MajorTickSize = 0;
xaxis.TextColor = OxyColors.Gray;
xaxis.FontSize = 10.0;
xaxis.Labels.Add("S");
xaxis.Labels.Add("M");
xaxis.Labels.Add("T");
xaxis.Labels.Add("W");
xaxis.Labels.Add("T");
xaxis.Labels.Add("F");
xaxis.Labels.Add("S");
LinearAxis yaxis = new LinearAxis();
yaxis.Position = AxisPosition.Left;
yaxis.MajorGridlineStyle = LineStyle.None;
xaxis.MinorGridlineStyle = LineStyle.None;
yaxis.MinorTickSize = 0;
yaxis.MajorTickSize = 0;
yaxis.TextColor = OxyColors.Gray;
yaxis.FontSize = 10.0;
yaxis.FontWeight = FontWeights.Bold;
ColumnSeries s2 = new ColumnSeries();
s2.LabelPlacement = LabelPlacement.Inside;
s2.LabelFormatString = "{0}";
s2.TextColor = OxyColors.White;
s2.ColumnWidth = 5.0;
s2.Items.Add(new ColumnItem
{
Value = Convert.ToDouble(50),
Color = OxyColor.Parse("#02cc9d")
});
s2.Items.Add(new ColumnItem
{
Value = Convert.ToDouble(40),
Color = OxyColor.Parse("#02cc9d")
});
s2.Items.Add(new ColumnItem
{
Value = Convert.ToDouble(30),
Color = OxyColor.Parse("#02cc9d")
});
s2.Items.Add(new ColumnItem
{
Value = Convert.ToDouble(20),
Color = OxyColor.Parse("#02cc9d")
});
s2.Items.Add(new ColumnItem
{
Value = Convert.ToDouble(30),
Color = OxyColor.Parse("#02cc9d")
});
s2.Items.Add(new ColumnItem
{
Value = Convert.ToDouble(40),
Color = OxyColor.Parse("#02cc9d")
});
s2.Items.Add(new ColumnItem
{
Value = Convert.ToDouble(50),
Color = OxyColor.Parse("#02cc9d")
});
Model = new PlotModel();
Model.Axes.Add(xaxis);
Model.Axes.Add(yaxis);
Model.Series.Add(s2);
Model.PlotAreaBorderColor = OxyColors.Transparent;
}
}
您可以通过更改 GapWidth 来实现。数值越大,宽度越小
xaxis.GapWidth = 10;
要扩展给定的答案,
ColumnWidth
(可能令人困惑)用于确定共享轴的条的相对大小。
所有条形图(在您的情况下,只有一个)在一个轴上消耗的宽度由 CategoryAxis.GapWidth
属性 决定 - 正如其他人所指出的那样 - 独立于系列。 属性 是空的 space(间隙)与非空的 space 的比率(所以 1
的默认值是 1:1 empty/not-empty 比率;小于 1 的值将向条形提交更多 space。
你的回答 link 只是向你展示了宽度是如何在内部计算的:令人困惑的是 MaxWidth
取决于系列报告的宽度,所以当你有一个系列。
我正在使用 Oxyplot 制作条形图。有没有办法改变栏的宽度?
我找到了这个解决方案:
protected override double GetActualBarWidth()
{
var categoryAxis = this.GetCategoryAxis();
return this.ColumnWidth / (1 + categoryAxis.GapWidth) / categoryAxis.MaxWidth;
}
从这里开始:
但是我不知道怎么应用。
这是我的代码:
<ContentPage.BindingContext>
<local:MainPageViewModel></local:MainPageViewModel>
</ContentPage.BindingContext>
<oxy:PlotView Model="{Binding Model}" HeightRequest="200" />
这是我的视图模型:
public class MainPageViewModel
{
public PlotModel Model { get; set; }
public MainPageViewModel()
{
CategoryAxis xaxis = new CategoryAxis();
xaxis.Position = AxisPosition.Bottom;
xaxis.MajorGridlineStyle = LineStyle.None;
xaxis.MinorGridlineStyle = LineStyle.None;
xaxis.MinorTickSize = 0;
xaxis.MajorTickSize = 0;
xaxis.TextColor = OxyColors.Gray;
xaxis.FontSize = 10.0;
xaxis.Labels.Add("S");
xaxis.Labels.Add("M");
xaxis.Labels.Add("T");
xaxis.Labels.Add("W");
xaxis.Labels.Add("T");
xaxis.Labels.Add("F");
xaxis.Labels.Add("S");
LinearAxis yaxis = new LinearAxis();
yaxis.Position = AxisPosition.Left;
yaxis.MajorGridlineStyle = LineStyle.None;
xaxis.MinorGridlineStyle = LineStyle.None;
yaxis.MinorTickSize = 0;
yaxis.MajorTickSize = 0;
yaxis.TextColor = OxyColors.Gray;
yaxis.FontSize = 10.0;
yaxis.FontWeight = FontWeights.Bold;
ColumnSeries s2 = new ColumnSeries();
s2.LabelPlacement = LabelPlacement.Inside;
s2.LabelFormatString = "{0}";
s2.TextColor = OxyColors.White;
s2.ColumnWidth = 5.0;
s2.Items.Add(new ColumnItem
{
Value = Convert.ToDouble(50),
Color = OxyColor.Parse("#02cc9d")
});
s2.Items.Add(new ColumnItem
{
Value = Convert.ToDouble(40),
Color = OxyColor.Parse("#02cc9d")
});
s2.Items.Add(new ColumnItem
{
Value = Convert.ToDouble(30),
Color = OxyColor.Parse("#02cc9d")
});
s2.Items.Add(new ColumnItem
{
Value = Convert.ToDouble(20),
Color = OxyColor.Parse("#02cc9d")
});
s2.Items.Add(new ColumnItem
{
Value = Convert.ToDouble(30),
Color = OxyColor.Parse("#02cc9d")
});
s2.Items.Add(new ColumnItem
{
Value = Convert.ToDouble(40),
Color = OxyColor.Parse("#02cc9d")
});
s2.Items.Add(new ColumnItem
{
Value = Convert.ToDouble(50),
Color = OxyColor.Parse("#02cc9d")
});
Model = new PlotModel();
Model.Axes.Add(xaxis);
Model.Axes.Add(yaxis);
Model.Series.Add(s2);
Model.PlotAreaBorderColor = OxyColors.Transparent;
}
}
您可以通过更改 GapWidth 来实现。数值越大,宽度越小
xaxis.GapWidth = 10;
要扩展给定的答案,
ColumnWidth
(可能令人困惑)用于确定共享轴的条的相对大小。
所有条形图(在您的情况下,只有一个)在一个轴上消耗的宽度由 CategoryAxis.GapWidth
属性 决定 - 正如其他人所指出的那样 - 独立于系列。 属性 是空的 space(间隙)与非空的 space 的比率(所以 1
的默认值是 1:1 empty/not-empty 比率;小于 1 的值将向条形提交更多 space。
你的回答 link 只是向你展示了宽度是如何在内部计算的:令人困惑的是 MaxWidth
取决于系列报告的宽度,所以当你有一个系列。