1
0

いまさら mermaid の xychart β版レビュー

Last updated at Posted at 2024-07-21

0. はじめに

自分は Qiita でいわゆるグラフ(折れ線グラフや棒グラフ)を描くことが多いのですが,簡単なものでも EXCEL で作成したグラフをビットマップで貼り付けるしかないと思っていました。しかし,最近 Qiita でもサポートされている mermaid でも xychart といういわゆるグラフ(折れ線グラフや棒グラフ)を描く機能の β 版がテストされていることを知りました。

ということで,どこまで出来るのかテストしてみました。

1. こんな折れ線グラフを描きたい

EXCELで作成したグラフをビットマップで貼り付けています。

ただし,グラフの下側にある図のタイトルだけは PlantUML で挿入しています。
※詳しいテクニックは下記の記事を参照下さい。

Qiitaのmarkdownで画像にキャプション(タイトル)を付ける方法 - Qiita

2. xychart β版で折れ線グラフを描く

mermaid を用いると,折れ線グラフは割と綺麗に描けます。ただし,データのX軸座標は等間隔である必要があります。

グラフの文字の大きさや色は細かく調整可能です。

```mermaid
%%{
    init:{
        "xyChart":{
            "width":640,
            "height":400,
            "titleFontSize":17,
            "xAxis":{
                "titleFontSize":17,
                "labelFontSize":17,
                "axisLineWidth":1,
                "tickWidth":1,
                "showLabel":true
            },
            "yAxis":{
                "titleFontSize":17,
                "labelFontSize":17,
                "axisLineWidth":1,
                "tickWidth":1,
                "showLabel":true
            }
        },
        "themeVariables":{
            "fontFamily":"monospaced",
            "xyChart":{
                "plotColorPalette":"red"
            }
        }
    }
}%%
xychart-beta
title "図2 四則演算で求める数と実現可能な組み合わせの数"
x-axis "四則演算で求める数" 0 --> 50
y-axis "実現可能な組み合わせ数" 0 --> 60
line [55, 55, 55, 40, 39, 42, 42, 44, 45, 47, 43, 37, 38, 32, 27, 40, 35, 37, 28, 33, 35, 26, 15, 12, 31, 22, 22, 13, 18, 15, 32, 15, 20, 15, 14, 23, 28, 20, 4, 10, 23, 11, 20, 10, 7, 16, 9, 3, 28, 21, 23]
```

3. こんな棒グラフを描きたい

PlantUML のインライン SVG スプライトを用いて*無理やり*作成した棒グラフです。

※詳しいテクニックは下記の記事を参照下さい。ただしオススメはしません。
QiitaのmarkdownでSVGを使って作図する - Qiita

4. xychart β版で棒グラフを描く

mermaid を用いると棒グラフも綺麗に描けます。

これは特定の棒の色を変えたのではなく,ピンク色 #ffc0cb の棒グラフと赤色 #ff0000 の棒グラフの二つを重ねています。色は plotColorPalette にて,個数分の色を羅列すれば良いようです。赤色 #ff0000 の棒グラフは,強調箇所以外では見えないように値をマイナスにしています。

```mermaid
%%{
    init:{
        "themeVariables":{
            "fontFamily":"monospaced",
            "xyChart":{
                "plotColorPalette":"pink,red"
            }
        }
    }
}%%
xychart-beta
title "図2 四則演算で求める数と実現可能な組み合わせの数"
x-axis "四則演算で求める数" [0,"​​","​‌","​⁠","​⁡",5,"​⁢","​⁣","​⁤","‌​",10,"‌‌","‌⁠","‌⁡","‌⁢",15,"‌⁣","‌⁤","⁠​","⁠‌",20,"⁠⁠","⁠⁡","⁠⁢","⁠⁣",25,"⁠⁤","⁡​","⁡‌","⁡⁠",30,"⁡⁡","⁡⁢","⁡⁣","⁡⁤",35,"⁢​","⁢‌","⁢⁠","⁢⁡",40,"⁢⁢","⁢⁣","⁢⁤","⁣​",45,"⁣‌","⁣⁠","⁣⁡","⁣⁢",50]
y-axis "実現可能な組み合わせ数" 0 --> 60
bar [55, 55, 55, 40, 39, 42, 42, 44, 45, 47, 43, 37, 38, 32, 27, 40, 35, 37, 28, 33, 35, 26, 15, 12, 31, 22, 22, 13, 18, 15, 32, 15, 20, 15, 14, 23, 28, 20, 4, 10, 23, 11, 20, 10, 7, 16, 9, 3, 28, 21, 23]
bar [-5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, 35, -5, -5, -5, 31, -5, -5, -5, -5, -5, 32, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5]
```

全てのX軸目盛りを表示させると重なって鬱陶しいので間引いて表示させています。一見,間引いた目盛りは同じ空文字列に見えますが,目盛りの値が重複するとエラーになるので,実は見えない文字を組み合わせて全ての目盛りの値が重複しないようにしています。

表1 見えない Unicode 文字の例
文字コード 説明
U+200B ZERO WIDTH SPACE
U+200C ZERO WIDTH NON-JOINER
U+2060 WORD JOINER
U+2061 FUNCTION APPLICATION
U+2062 INVISIBLE TIMES
U+2063 INVISIBLE SEPARATOR
U+2064 INVISIBLE PLUS

0~50 までの間の見えない目盛りは 40 個ありますが,見えない Unicode 文字 7 種類を 2 個ずつ使用すれば 49 通りの重複しない見えない文字列が作れるので,このうち 40 個を使っています。

5. まとめ

今後の課題をまとめると下記のようになるでしょうか?

  • グラフのタイトルが上側に固定されており,下側に表示できません
    ※他のチャートも同様なので改善される見込みは薄いように思います
  • 折れ線グラフの線の太さを変更できません
  • 棒グラフの棒の幅を変更できません
  • 棒グラフの値がゼロのときも高さがあります(マイナスの値にしないと棒が消えません)
  • X,Y 軸の目盛り間隔を指定できません
  • グリッド表示できません
  • 凡例を表示できません

6. 参考文献

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0