GraphライブラリNivo#01の使用
Riot APIを使って面白いものを作っています.
メンバーの取引量をグラフで表示するために、以前から面白いと思っていたグラフライブラリNivoを使いました.
この記事では、Nivoに関する様々な情報ではなく、私が使っている部分だけを紹介します.
Nivoホームページが接続されている場合は、別のグラフィックを選択できます.
Nivoの様々なグラフでもbar形式のグラフを使いました.
素子が追加されていましたが、ここではどうすればいいのか分からず、いろいろ触ってしまいました.
まず
そこで、どのような形でデータを受信するかを分解しました.
乾杯.ジョンニーの取引量が出た.次の文章では、他のチャンピオンの取引量を同時に表示し、設計を修正します.
メンバーの取引量をグラフで表示するために、以前から面白いと思っていたグラフライブラリNivoを使いました.
この記事では、Nivoに関する様々な情報ではなく、私が使っている部分だけを紹介します.
Nivoホームページが接続されている場合は、別のグラフィックを選択できます.
Nivoの様々なグラフでもbar形式のグラフを使いました.
Nivoインストール
yarn add @nivo/core @nivo/bar
Nivo Barコード
import { ResponsiveBar } from '@nivo/bar'
// make sure parent container have a defined height when using
// responsive component, otherwise height will be 0 and
// no chart will be rendered.
// website examples showcase many properties,
// you'll often use just a few of them.
const MyResponsiveBar = ({ data /* see data tab */ }) => (
<ResponsiveBar
data={data}
keys={[
'hot dog',
'burger',
'sandwich',
'kebab',
'fries',
'donut'
]}
indexBy="country"
margin={{ top: 50, right: 130, bottom: 50, left: 60 }}
padding={0.3}
valueScale={{ type: 'linear' }}
indexScale={{ type: 'band', round: true }}
colors={{ scheme: 'nivo' }}
defs={[
{
id: 'dots',
type: 'patternDots',
background: 'inherit',
color: '#38bcb2',
size: 4,
padding: 1,
stagger: true
},
{
id: 'lines',
type: 'patternLines',
background: 'inherit',
color: '#eed312',
rotation: -45,
lineWidth: 6,
spacing: 10
}
]}
fill={[
{
match: {
id: 'fries'
},
id: 'dots'
},
{
match: {
id: 'sandwich'
},
id: 'lines'
}
]}
borderColor={{
from: 'color',
modifiers: [
[
'darker',
1.6
]
]
}}
axisTop={null}
axisRight={null}
axisBottom={{
tickSize: 5,
tickPadding: 5,
tickRotation: 0,
legend: 'country',
legendPosition: 'middle',
legendOffset: 32
}}
axisLeft={{
tickSize: 5,
tickPadding: 5,
tickRotation: 0,
legend: 'food',
legendPosition: 'middle',
legendOffset: -40
}}
labelSkipWidth={12}
labelSkipHeight={12}
labelTextColor={{
from: 'color',
modifiers: [
[
'darker',
1.6
]
]
}}
legends={[
{
dataFrom: 'keys',
anchor: 'bottom-right',
direction: 'column',
justify: false,
translateX: 120,
translateY: 0,
itemsSpacing: 2,
itemWidth: 100,
itemHeight: 20,
itemDirection: 'left-to-right',
itemOpacity: 0.85,
symbolSize: 20,
effects: [
{
on: 'hover',
style: {
itemOpacity: 1
}
}
]
}
]}
role="application"
ariaLabel="Nivo bar chart demo"
barAriaLabel={function(e){return e.id+": "+e.formattedValue+" in country: "+e.indexValue}}
/>
)
この形式のプリセットを提供します.素子が追加されていましたが、ここではどうすればいいのか分からず、いろいろ触ってしまいました.
まず
const MyResponsiveBar = ({ data /* see data tab */ }) => (
<ResponsiveBar
data={data}
keys={[
'hot dog',
'burger',
'sandwich',
'kebab',
'fries',
'donut'
]}
この部分からデータは誰が見ても最も重要であることがわかります.そこで、どのような形でデータを受信するかを分解しました.
export interface BarDatum {
[key: string]: string | number;
}
export interface DataProps<RawDatum extends BarDatum> {
data: RawDatum[];
}
タイプスクリプトを使用してプロジェクトを実行しています.インタフェースを生成する必要があります.
export interface UserDamageInfo {
[key: string]: string | number;
}
let userDamage: object[] = [];
/// map
userDamage[i] = { [user.championName]: user.totalDamageDealtToChampions };
///Nivo Bar Graph Component
type UserProps = {
data: UserDamageInfo[];
};
/// [key: string]: string | number;
export const DealGraph = ({ data }: UserProps) => {
const dataKeys = data.map((key: object) => {
return Object.keys(key);
});
return (
<ResponsiveBar
data={data}
keys={[dataKeys[0]]}
乾杯.ジョンニーの取引量が出た.次の文章では、他のチャンピオンの取引量を同時に表示し、設計を修正します.
Reference
この問題について(GraphライブラリNivo#01の使用), 我々は、より多くの情報をここで見つけました https://velog.io/@bak_chun8/Graph-라이브러리-Nivo-사용기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol