我正在使用VictoryPie
. 由于标签都奇怪地重叠,我想只使用 VictoryLegend。我找到了这个例子jsfiddle
:https ://jsfiddle.net/boygirl/1Lu96jq0/
jsfiddle 示例指定内部的颜色colorScale
,如下所示:colorScale={["tomato", "orange", "gold"]}
但是,我的饼图是动态的,并且取决于用户输入,所以我无法预测我需要多少颜色。我colorScale="blue"
在 VictoryLegend 里面试过,就像在 VictoryPie 里面做的饼图是正确的,但是所有的图例标签都是黑色的。顺便说一句,我的实现中的标签也不会像示例中那样垂直堆叠显示,而是在页面上水平扩展。
我的渲染看起来像这样:
render() {
const {
data,
pieChartData,
beyondBudget,
showResults,
total,
pieLegend
} = this.state;
const questions = data.questions;
return (
<div>
{questions.map((q, i) => (
<UL key={i}>
<li>
<h4>{q.text}</h4>
</li>
<li>
<Options
state={this.state}
q={q}
i={i}
handler={this.handleInputChange}
/>
</li>
</UL>
))}
<button onClick={this.computeTotals}>Click</button>
{console.log("trying the keys approach", this.state.pieLegend)}
{this.state.showResults &&
(<div>
<VictoryLegend
standalone={false}
colorScale="blue"
legendWidth={50}
title="Legend"
centerTitle
style={{ border: { stroke: "black" } }}
data= {this.state.pieLegend}
/>
<VictoryPie
colorScale="blue"
data={pieChartData}
labels={d => `${d.x}: ${d.y}%`}
style={{ parent: { maxWidth: '50%' } }}
/>
{Object.keys(beyondBudget).length > 0 && (
<div>
<Table>
<tbody>
<tr>
<th>Out of Budget</th>
</tr>
<BrokeBudget
beyondBudget={beyondBudget}
/>
</tbody>
</Table>
</div>
)}
</div>
)
}
</div>
);
}
}