2

d3 チャートプロッタの日時軸の色を変更する方法を知りたいです。

ここに画像の説明を入力

変更したい色は、2 つの棒の間の茶色と白い背景色です。

私がそれを行う場合:

最初の茶色のバーの上にあるものだけを変更します。

ここに画像の説明を入力

この 2 つのバーの色を変更することはできますか?

4

1 に答える 1

2

不思議なことに、私はたまたま同じことをしようとしていた. これらの色はハードコードされていることがわかりましたMayorDateTimeLabelProvider.cs(以下のコメントの行に注目しました)。コンパイル済みの DLL を使用している場合、値を変更する方法はありません。個人的には、D3 は非常に未熟なので、独自のビルドを保持し、必要に応じて変更を加えて拡張します (この場合のように!)。

public override UIElement[] CreateLabels(ITicksInfo<DateTime> ticksInfo)
{
    object info = ticksInfo.Info;
    var ticks = ticksInfo.Ticks;
    UIElement[] res = new UIElement[ticks.Length - 1];
    int labelsNum = 3;

    if (info is DifferenceIn)
    {
        DifferenceIn diff = (DifferenceIn)info;
        DateFormat = GetDateFormat(diff);
    }
    else if (info is MayorLabelsInfo)
    {
        MayorLabelsInfo mInfo = (MayorLabelsInfo)info;
        DifferenceIn diff = (DifferenceIn)mInfo.Info;
        DateFormat = GetDateFormat(diff);
        labelsNum = mInfo.MayorLabelsCount + 1;

        //DebugVerify.Is(labelsNum < 100);
    }

    DebugVerify.Is(ticks.Length < 10);

    LabelTickInfo<DateTime> tickInfo = new LabelTickInfo<DateTime>();
    for (int i = 0; i < ticks.Length - 1; i++)
    {
        tickInfo.Info = info;
        tickInfo.Tick = ticks[i];

        string tickText = GetString(tickInfo);

        Grid grid = new Grid
        {
            Background = Brushes.Beige // **** HARD CODED HERE
        };
        Rectangle rect = new Rectangle
        {
            Stroke = Brushes.Peru,     // **** AND HERE
            StrokeThickness = 2
        };
        Grid.SetColumn(rect, 0);
        Grid.SetColumnSpan(rect, labelsNum);

        for (int j = 0; j < labelsNum; j++)
        {
            grid.ColumnDefinitions.Add(new ColumnDefinition());
        }

        grid.Children.Add(rect);

        for (int j = 0; j < labelsNum; j++)
        {
            var tb = new TextBlock
            {
                Text = tickText,
                HorizontalAlignment = HorizontalAlignment.Center,
                Margin = new Thickness(0, 3, 0, 3)
            };
            Grid.SetColumn(tb, j);
            grid.Children.Add(tb);
        }

        ApplyCustomView(tickInfo, grid);

        res[i] = grid;
    }

    return res;
}
于 2013-11-07T16:25:20.597 に答える