Rechartsを使用してBarChartを実装しようとしています。ただし、width={600}
およびheight={300}
により、Barchartは絶対になり、応答しなくなります。 Barchartをレスポンシブにする方法は? width={'50%"} height={"40%"}
としてパーセンテージを使用しようとしましたが、機能しませんでした。
import { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, Legend } from 'recharts';
<BarChart className="barChart" width={600} height={300} data={data}
margin={{top: 5, right: 30, left: 20, bottom: 5}} label="heaf">
<CartesianGrid strokeDasharray="3 3"/>
<XAxis dataKey="name"/>
<YAxis/>
<Tooltip/>
<Legend />
<Bar dataKey="occupied" barSize={10} fill="#05386b" />
<Bar dataKey="available" barSize={10} fill="#fdaa00" />
<Bar dataKey="cleaning" barSize={10} fill="#379583" />
<Bar dataKey="reserved" barSize={10} fill="#c60505" />
</BarChart>
ResponsiveContainer
が提供するrecharts
を使用できます。
Docs of ResponsiveContainer
言う:
チャートを親コンテナのサイズに適合させるためのコンテナコンポーネント。小道具の幅と高さのいずれかをパーセント文字列にする必要があります。
作業コード https://codesandbox.io/s/react-recharts-responsive-stack-overflow-863bi です。出力ウィンドウの幅のサイズを変更してみてください。
import React from "react";
import ReactDOM from "react-dom";
import {
BarChart,
Bar,
XAxis,
YAxis,
CartesianGrid,
Tooltip,
Legend,
ResponsiveContainer
} from "recharts";
import "./styles.css";
const data = [
{ name: "Page A", uv: 4000, pv: 2400, amt: 2400 },
{ name: "Page B", uv: 3000, pv: 1398, amt: 2210 },
{ name: "Page C", uv: 2000, pv: 9800, amt: 2290 },
{ name: "Page D", uv: 2780, pv: 3908, amt: 2000 },
{ name: "Page E", uv: 1890, pv: 4800, amt: 2181 },
{ name: "Page F", uv: 2390, pv: 3800, amt: 2500 },
{ name: "Page G", uv: 3490, pv: 4300, amt: 2100 }
];
const SimpleAreaChart = () => {
return (
<ResponsiveContainer>
<BarChart data={data} margin={{ top: 5, right: 30, left: 20, bottom: 5 }}>
<CartesianGrid strokeDasharray="3 3" />
<XAxis dataKey="name" />
<YAxis />
<Tooltip />
<Legend />
<Bar dataKey="pv" fill="#8884d8" />
<Bar dataKey="uv" fill="#82ca9d" />
</BarChart>
</ResponsiveContainer>
);
};
const rootElement = document.getElementById("container");
ReactDOM.render(<SimpleAreaChart />, rootElement);
container
のCSSは次のとおりです。
#container {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
padding: 10px;
width: 100%;
height: 400px;
background-color: #fff;
}
ResponsiveContainer
を使用して動作させる必要があります。また、パーセンテージ値without括弧を使用します。
<ResponsiveContainer width="95%" height={400}>
// your chart
</ResponsiveContainer>
私はそれを使用し、それはうまく機能しました! :)
出典: レスポンシブコンテナドキュメント
Divで棒グラフをラップします。
<div style={{ position: 'relative', width: '50%', paddingTop: '40%' }}>
<div style={{ position: 'absolute', height: '100%' }}>
<BarChart />
</div>
</div>
外側のdivの場合:幅50%はコンテナの幅を基準にします。 paddingTopは、コンテナの幅の40%です。
内側のdivの場合:高さが100%の場合、高さはpaddingTopのみであるコンテナ全体を占有します。