BLOG

HTMLとCSSで作るインフォグラフィック(円/棒グラフ・レーダーチャート)【アニメーションつき】

更新日:2022/06/03

近年では、グラフやチャートといったインフォグラフィックを導入しているウェブサイトが増えてきています。インフォグラフィック化することでデータをよりわかりやすく表示出来たり、重要なポイントを強調したりできる、といったメリットを挙げることができます。

インフォグラフィックをウェブサイトに入れる場合、作成した画像を貼るだけでは問題ないですが、そこにアニメーションをつけるとなるとHTMLやCSS、JavaScriptを用いて作成する必要があります。HTMLやCSSでインフォグラフィックを作ろうとすると、なんだか難しそう…というイメージがあるかもしれませんが、実際には、とてもシンプルに作ることができます。どれくらい簡単か、ぜひ本記事で確認してみてください。

完成のデモはこちら

インフォグラフィックとは

インフォグラフィック(infographics)とは、「info(情報)」を「graphics(図形)」で表すという意味の言葉です。データを視覚的にわかりやすくするために、図やグラフに要素を盛り込んだものです。数値の推移や、文字では説明しづらい情報を簡潔でわかりやすく伝えたいときに便利です。標識や地図、教科書に使われていましたが、近年ではウェブサイトにも取り入れられるようになっています。

以下のようなものがインフォグラフィックに当てはまります。

インフォグラフィックに関するブログ記事は他にもありますので、以下も合わせてご覧ください。

インフォグラフィックとは?ゼロから作成まで徹底解説!

本記事では4種類のインフォグラフィックの作り方を解説します。

円グラフ

まずはこのような円グラフを作っていきます。

円をSVGで作る

まずは円グラフの円を作ります。SVGタグのcircleで円を描きます。

設定項目は以下の通りです。

cx 円のX軸の中心座標
cy 円のY軸の中心座標
r 半径

cxとcyを0にしたとき、円の中心部が0地点に来るイメージです。

svgエリアの中心に円が来るよう、cxとcyを調整しましょう。

次に、SVGのエリアと円の大きさをCSSで調整します。円の半径を70px(直径140px)で設定しましたが、円に10pxの枠線を付けてグラフの線にするため、その太さを考慮しエリアは円の直径よりも少し大きくしています。

circleは以下のような設定です。

設定項目は以下の通りです。

fill 塗りつぶし
stroke-width 線の太さ
stroke 線の色
stroke-dasharray 線の間隔
stroke-dashoffset 線が始まる位置
stroke-linecap パスの端の形を変える(roundは円)

今回は直径140pxの円なので、外周を求めるには140px × π = 439.822…px(四捨五入して440px)となります。そのため、線が始まる位置を0pxにし、線の間隔は開けなくてよいので440pxにしています。これで、グレーの円が出来上がりました。

数値用の円をSVGで作る

次に、数値を表す円を作り、上に重ねます。先ほど作った円に .base というクラスを付け、新しい円に .line というクラスを付けました。

任意の数値までの線にしたい場合、外周 ―(外周 × 入れたい数値) ÷ 100 となります。
今回は入れたい数値を88にしているので、外周の88%の線が引かれます。

文字を入れる

このままでも円グラフとして成り立っていますが、より数値などがわかりやすいようテキスト情報を入れたいと思います。

.number の中に数値とパーセント記号、.text にグラフの名前を入れてみました。

そして、これらを修飾します。
.number は絶対配置で円の中心に移動させ、数字とパーセント記号のジャンプ率を変えます。
グラフの名前は真ん中寄せにしてみました。

すると、このような形になります。

アニメーションを付ける

.line(色のついたほうの線)に対してアニメーションをつけます。1秒で、線の長さが0から440pxになる、というものです。

すると、このように動きます。

円グラフの開始位置を上にする

現在、グラフが右から始まる状態になっています。これでも問題はありませんが、上から始まるグラフのほうが慣れ親しんでいるかと思いますので、グラフを回転して調整します。

このように、上から始まる円グラフになりました。

複製する

色ごとにクラスを変えて複製してみました。

HTMLの全体ソースを表示する

HTML

CSSの全体ソースを表示する

CSS

完成のデモはこちら

棒グラフ

横に伸びる棒グラフを作っていきます。

棒グラフを作る

棒グラフ用の .graph と、その大枠 .bar-graph-wrap 用意します。今は中身が空で大丈夫です。

CSSで、グラフの大枠の高さを固定しました。

グラフは絶対配置にし、表したいパーセンテージをwidthで指定します。今回は88%としたかったので、widthも88%にしています。

すると、このような形になります。

グラフ名と数値のテキストを入れる

表示する場所を変えたいので、グラフ名と数値のテキストはそれぞれspanで囲いました。

両端に配置したかったので、display: flex; にし、justify-content: space-between; を用いています。
要素の端にくっついてほしくなかったので、paddingで内側に余白をとっています。

すると、このような形になります。

アニメーション化する

以下は棒グラフが左から伸びるように、グラフの位置を左方向へ-100%にし、3秒かけて右に移動するというアニメーションです。

大枠の外からグラフが右へ流れるので、枠の外にいるときは非表示にするために、overflow: hidden; にしました。

すると、このようににゅるっと伸びるような動きになります。

複製する

色ごとにクラスを変えて複製してみました。

HTMLの全体ソースを表示する

HTML

CSSの全体ソースを表示する

CSS

完成のデモはこちら

棒グラフ(横)

縦に伸びる棒グラフにするやり方を紹介します。
先ほど作った棒グラフをベースにしており、追加になるCSSのみ記載します。

縦にしたいグラフの大枠に .vertical というクラスを付けました。そして、縦の長さを少し長くし、横幅いっぱいですとグラフが見づらくなるので幅を狭めました。これはグラフの本数によって適宜調整すればよいかと思います。

グラフは縦幅が50pxに固定されていましたが、横幅を固定値にし、縦はパーセンテージによって変化するようにします。縦に伸びるのに合わせ、角丸(border-radius)の場所も変更しました。下からの位置を0pxで固定しています。

グラフの横幅を狭めたことでテキストが見づらくなったので、フォントサイズを下げました。

グラフの位置を調整します。パーセンテージは高さ(height)で指定できます。

アニメーションはY軸ベースにすることで、下から上に来るような縦のアニメーションになります。

すると、このように縦に伸びる棒グラフにすることができます。

完成のデモはこちら

レーダーチャート

3つの頂点があるレーダーチャートを作ります。

背景を作る

グラフ用の背景を作ります。CSSで作るのは大変なので、画像を用意しました。

この画像を、グラフの背景に設置します。
.graph-bg という枠を作り、背景に画像が当たるようにしました。

グラフを作る

先ほど作った背景用の.graph-bg の中に、グラフ用の .rader を作ります。

グラフはclip-pathで作成しています。clip-path では指定した領域は表示し、外側は非表示にするというクリッピング領域を作ることができます。今回使っているpolygonは多角形を作るためのプロパティです。このように指定します。

clip-pathにはこのようなジェネレーターもあるので、よかったら参考にしてみてください。
CSS clip-path maker

アニメーションを作る

clip-path のサイズを0から100%にするアニメーションをあてています。こうすると、グラフが伸びるような表現になります。

複製する

色ごとにクラスを変えて複製してみました。

HTMLの全体ソースを表示する

HTML

CSSの全体ソースを表示する

CSS

完成のデモはこちら

レーダーチャート(五角形)

5つの頂点があるレーダーチャートを作ります。

背景を作る

グラフ用の背景を作ります。CSSで作るのは大変なので、画像を用意しました。

この画像はXDで作りました。

三角形作成ツールからサイズで5と入力すると、簡単に五角形を作れます。サイズを変えて4つ複製すると、このような見た目になります。

この画像を、グラフの背景に設置します。.graph-bg という枠を作り、背景に画像が当たるようにしました。

グラフを作る

先ほど作った背景用の.graph-bg の中に、グラフ用の .pentagon を作ります。

こちらのグラフもclip-pathで作成しています。五角形は[X軸の頂点 Y軸の頂点]を5つ指定して作ります。

アニメーションを作る

clip-path のサイズを0から100%にするアニメーションをあてています。こうすると、グラフが伸びるような表現になります。

複製する

色ごとにクラスを変えて複製してみました。

HTMLの全体ソースを表示する

HTML

CSSの全体ソースを表示する

CSS

完成のデモはこちら

まとめ

ということで、いくつかのインフォグラフィックの作り方を本記事でまとめました。どれもHTMLとCSSのみでできるので、比較的導入しやすいかなと思います。

今回はHTMLとCSSを使ったものに絞りましたが、インフォグラフィックに特化したJavaScriptライブラリも何種類かあります。次のレベルにステップアップしてみたい!という方は以下のようなライブラリも参考にしてみてはいかがでしょうか。

D3.js
Chart.js
HighChart.js
Chartist.js

データを分かりやすく伝える手段のひとつであるインフォグラフィックをつかって、より多くの人に情報を届けられると幸いです。

参考サイト

円グラフ
Circle Progress Bar Using Html CSS and SVG | CSS Percentage Circle
cssで円グラフを表示させる件@モーショングラフィックス風

棒グラフ
CodePen Home CSSで棒グラフ(アニメーション付き)

レーダーチャート
Pure CSS Radar Chart

FOLLOW US