LoginSignup
0
0

More than 5 years have passed since last update.

axlsxでグラフを書いたときの落とし穴2つ

Posted at

Rubyからxlsxを出力するためのライブラリとして、randym/axlsxがあります。これはグラフ描画にも使える…のですが、2箇所ほどハマりました。

余計なもの(次元)がついてくる

axlsxで作れるグラフは、以下の種類があります。

  • AreaChart…面グラフ
  • BarChart…棒グラフ
  • Bar3DChart…3D棒グラフ
  • BubbleChart…バブルチャート
  • LineChart…折れ線グラフ
  • Pie3DChart…3D円グラフ
  • ScatterChart…散布図

となっていて、どういうわけか円グラフが3Dのしかありません。3D円グラフの利点は目の錯覚を活かせることぐらいしかないので、まっとうな用途ではできれば使いたくありません。

どうしようかと調べていたところ、rot_x: 90と指定することで90度回転させて、真上を表示するようにするという、コロンブスの卵的、あるいは富豪的な解決法がありました。

順番が合わない

どうにか円グラフも作れるようになったところで、今度は棒グラフを作っていたのですが、予想外なことになりました。

wb.add_worksheet(name: '棒グラフ') do |sheet|
  sheet.add_row ['a', 1]
  sheet.add_row ['b', 2]
  sheet.add_row ['c', 3]
  sheet.add_row ['d', 4]
  sheet.add_chart(Axlsx::BarChart, start_at: 'A5', end_at: 'F17') do |chart|
    chart.add_series data: sheet['B1:B4'], labels: sheet['A1:A4']
  end
end

これで棒グラフはできたのですが、表の方の並びが上からa、b、c、dの順なのに対して、グラフの方はその逆順に並んでしまっているのです。どうすればいいのかわからず、Excelで変更して保存を行い、出来上がったxlsxを解凍してxmlを比較した結果、どこを調整すればいいかが判明しました。

  sheet.add_chart(Axlsx::BarChart, start_at: 'A5', end_at: 'F17') do |chart|
    chart.add_series data: sheet['B1:B4'], labels: sheet['A1:A4']
    chart.cat_axis.scaling.orientation = :maxMin
  end

うーん、わからない!

0
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
0
0