人生やまあり

大学卒業後IT会社に就職してITをやってます。

はてなブログにjQuery Highchartsを使ってきれいなグラフをのせる方法


<スポンサードリンク>

Highchartsをつかったグラフ本当に綺麗ですよね!!!


Highchartsつかうと上のようなグラフがすぐ描けます。

昔サイドバーや記事に仕込んでいたjQueryが気づいたら動かなくなっていたので、今日ははてなブログでjQueryを利用する方法を紹介します。

この記事の内容、対象、目標

内容

  • はてなブログでjQueryを使うための準備について説明します。
  • はてなブログでHighcahrtsが使うための準備について説明します。

対象

  • jQuery、highcharts初心者
  • はてなブログ利用者

目標

  • サンプルをつかってjQuery highchartsを利用した上記のグラフを描けるようになること!!

はてなブログでjQueryが使えなくなった原因

いろいろと調査したところ下記の記事を見つけました。

ブログをおよそ2倍の速さで表示する、などの改善と機能追加を行いました - はてなブログ開発ブログ

記事によると、

自作スクリプト等でjQueryを利用している際の注意点
今回の改善で、これまでページ上部で呼び出していたjQueryをページ下部に移動しました。これにより、jQueryがロードされていることを前提としたスクリプトは動作しなくなっています。

jQueryなどのライブラリを利用される際には,以下のようにライブラリを明示的に読み込み、さらにスクリプト全体を関数で囲ってjQueryオブジェクトを引数に呼び出すようにしてください。

らしいです。なるほど。はてなブログのスピードあげるために、jQueryのライブラリを最後に読み込むように変更されたのが原因みたいですね。

対策

その1)ライブラリの読込

はてなブログはデザインという項目でヘッダやフッタ、CSSなどをカスタマイズすることができます。
管理画面からデザイン>カスタマイズ>ヘッダと移動して、タイトル下という欄に下記の2行を追記しましょう。

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script src="http://code.highcharts.com/highcharts.js"></script>

これで明示的にライブラリを読込ます。

その2)jQueryオブジェクトを引数に呼び出す

さらにスクリプト全体を関数で囲ってjQueryオブジェクトを引数に呼び出します。

<script>
  (function($) {
     $(function() { ... });
})(jQuery);

実際に書いてみる

では実際に動作するかどうかグラフを描いてみましょう。
その1のライブラリ読込を設定後、下記のスクリプトをコピペしてみてください。
必ずはてな記法モードに変更して下さい。変更方法は
はてなブログで様々なプログラミングソースコードをのせる方法 - 人生やまありを参照。

<style type="text/css">
#example {
	border: 1px solid #000;
	padding: 20px;
	margin: 10px auto;
                width: 90%;
                height: 100%;
}
</style>
<script language="JavaScript">
(function($) {

$(document).ready(function() {
    var options;
    options = {
            title: {
                text: 'Average Monthly Temperature and Rainfall in Tokyo'
            },
            subtitle: {
                text: 'Source: WorldClimate.com'
            },
            xAxis: [{
                categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
                    'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
            }],
            yAxis: [{ // Primary yAxis
                labels: {
                    format: '{value}°C',
                    style: {
                        color: Highcharts.getOptions().colors[1]
                    }
                },
                title: {
                    text: 'Temperature',
                    style: {
                        color: Highcharts.getOptions().colors[1]
                    }
                }
            }, { // Secondary yAxis
                title: {
                    text: 'Rainfall',
                    style: {
                        color: Highcharts.getOptions().colors[0]
                    }
                },
                labels: {
                    format: '{value} mm',
                    style: {
                        color: Highcharts.getOptions().colors[0]
                    }
                },
                opposite: true
            }],
            tooltip: {
                shared: true
            },
            legend: {
                layout: 'vertical',
                align: 'left',
                x: 120,
                verticalAlign: 'top',
                y: 100,
                floating: true,
                backgroundColor: (Highcharts.theme && Highcharts.theme.legendBackgroundColor) || '#FFFFFF'
            },
            series: [{
                name: 'Rainfall',
                type: 'column',
                yAxis: 1,
                data: [49.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4],
                tooltip: {
                    valueSuffix: ' mm'
                }
    
            }, {
                name: 'Temperature',
                type: 'spline',
                data: [7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6],
                tooltip: {
                    valueSuffix: '°C'
                }
            }],
        credits: {
            enabled: false,
        },
    };
    $('#example').highcharts(options);
});
})(jQuery);

</script>

<div id="example"></div>

下記のようなグラフが表示されれば成功です(^-^)