胜利堆栈中单杠的间距和大小?

Spacing and size of horizontal bars in a Victory stack?

我有一个简单的 3 部分水平条形图,如下所示:

您可以在 CodeSandbox 上查看或试用代码:

function App() {
  return (
    <VictoryStack colorScale={['#D0021B', '#F5A623', '#00C16F']}>
      <VictoryBar horizontal data={[{ x: 'progress', y: 50 }]} />
      <VictoryBar horizontal data={[{ x: 'progress', y: 25 }]} />
      <VictoryBar horizontal data={[{ x: 'progress', y: 25 }]} />
    </VictoryStack>
  )
}

我有两个部分有问题:

  1. 我怎样才能使这 3 个条的高度更高(从技术上讲,我猜是宽度,因为我把它变成水平的)?
  2. 如何在每个栏之间添加一点间距?意思是红色、橙色和绿色条之间 space 的 2px。

我在查看 VictoryStack 文档和 VictoryBar 图表时尝试了很多东西,但我无法让它工作。任何帮助将不胜感激,谢谢!

  1. 您可以使用 属性 barWidth 来设置条的宽度:

    <VictoryBar
        horizontal
        barWidth={30}
        data={[{ x: 'progress', y: 50 }]}
    />
    

    或者还有另一种方法可以通过 style:

    <VictoryBar 
        horizontal 
        style={ { data: { width:30 } } } 
        data={[{ x: 'progress', y: 25 }]}
    />
    
  2. 要在条形之间留出空间,请尝试使用 y0 属性:

    <VictoryBar
        horizontal
        data={[{ x: 'progress', y: 25, y0: 77 }]}
    />
    

在这里描绘整个解决方案是您稍加提炼的Sandbox

这是一个可行的解决方案:

barWidth 条形高度道具

添加了一个 style 道具以模拟带边框的边距

https://codesandbox.io/s/7y2ym084o6

import React from "react";
import ReactDOM from "react-dom";
import { VictoryStack, VictoryBar } from "victory";

function App() {
  return (
    <VictoryStack
      style={{
        data: {
          stroke: "rgba(255,255,255,1)",
          strokeWidth: 2
        }
      }}
      colorScale={["#D0021B", "#F5A623", "#00C16F"]}
    >
      <VictoryBar barWidth={30} horizontal data={[{ x: "progress", y: 50 }]} />
      <VictoryBar barWidth={30} horizontal data={[{ x: "progress", y: 25 }]} />
      <VictoryBar barWidth={30} horizontal data={[{ x: "progress", y: 25 }]} />
    </VictoryStack>
  );
}

const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);

您可以使用 barWidth and/or 样式道具使用此处提出的其他解决方案。

但是,我认为硬编码 barWidth 不是一个好主意,原因有两个。首先,barWidth 应该响应您用来查看图表的设备的显示尺寸。其次,随着您的图表变得越来越复杂,您的 VictoryBars 数量可能会发生变化。

我认为有一个更优雅的解决方案:barRatio 道具。这将动态设置 barWidth 相对于条之间的可用 space,如记录 here.

如果您想填充整个 space 并使您的条形尽可能宽,则 barRatio 为 1 是有意义的,例如:

 <VictoryBar data={data} key={outcome} barRatio={1} alignment="start" />