ill-identified diary

所属組織の見解などとは一切関係なく小難しい話しかしません

[R] 『Rで名刺 ggplot2編』の真似をした

この記事は最終更新日から3年以上が経過しています

概要

  • これは手抜き記事です.
  • ggplot2 などを使って名刺を作ってみた.
  • 結論から言って TeX で作ったほうが楽なんじゃないかな……

先月末から無職になったため, 再就職までの間の名刺が必要になったので作った. プログラムはほとんど以下の記事で紹介されていた方法の流用だが, 多少は変更を加えている. ただし, 以下の記事は Mac 環境のようだが, ここでは Linux で作成しており, WindowsMac での動作確認はしていない.

主な変更点は, ggimage パッケージは画像のアスペクト比の調整ができないため, 廃止したということである. 一方で, 貼り付けられる画像は png のみとなり, また1種類だけとなったが, R が分かる人ならば簡単に変更できると思うのでシンプルなままにしておく.

プログラムの解説

基本的には概要で挙げたエントリのパクリじゃなかった流用である. ソースコードの全文は gist にある.

gist3c10f73d5967c6dbd0b3054f2dbb4ad0

ggimage は使わずに, ggplot2::annotation_raster() 関数を使って画像を貼り付けている. そのため画像のアスペクト比が保持され, また imagemagick のインストールが不要になった*1. 名刺画像作成機能をもつ関数を plot_card() 関数として定義した.

引数は以下のようになる. メールアドレス, ウエブサイト, 注意書きはそれぞれいずれかを省略すると自動で位置調整を行う.

  1. given_name 必須. 名
  2. family_name 任意. 姓
  3. given_name_en 任意. ローマ字名
  4. family_name_en 任意. ローマ字姓
  5. job_title 職名, あるいは所属企業名も
  6. personal_title 任意. 称号 (学位とか爵位とか)
  7. mail 任意.メールアドレス
  8. website 任意. ウェブサイト
  9. note 任意. 注意書き, その他特記事項
  10. portrait_path 任意. 顔写真あるいは何らかのロゴマーク画像のパス. pngのみ対応
  11. qr_string 任意. QRコード化する文字列. デフォルトでは website の文字列を QR コードにする (websiteNULL でない場合のみ).
  12. sans 任意. ゴシック体フォント
  13. serif 任意. セリフフォント

plot_card <- function(given_name, family_name="",
                      given_name_en="", family_name_en="",
                      job_title="無職", personal_title=NULL,
                      mail=NULL, website=NULL, note=NULL,
                       portrait_path=NULL, qr_string=NULL,
                      sans="TakaoExGothic", serif="TakaoExMincho")

sans と serif は Ubuntu 日本語版の標準フォントである Takao になっており, 他の OS で Takao を使用したい場合は変更するか, フォントをインストールする必要がある.

以下のサンプルプログラムを実行すると, 以下のような名刺ができる. Rlogo.pnghttps://www.r-project.org/logo/ から予めダウンロードしておく. Rstudio のグラフプレビューだと字の大きさが不自然だが, 画像として保存すればおおむね自然な大きさになる.

p <- plot_card(given_name = "おじさん", family_name = "R", given_name_en = "Ojisan", family_name_en = "R",
               personal_title = "市民",
                mail = "foo@bar.jp", website = "https://www.google.co.jp", note = "ここに注意書き",
               portrait_path="Rlogo.png", qr_string = T,
               sans="TakaoExGothic", serif="TakaoExMincho")
# 画像保存. png or pdf
ggsave(filename = "sample.png", device = "png", width = 91, height = 55, units = "mm", dpi = 350, plot = p)
ggsave("sample.pdf", device = cairo_pdf, width = 91, height = 55, units = "mm", dpi = 350, plot = p)

上記で作成したサンプル名刺画像がこちら

f:id:ill-identified:20180119172104p:plain

印刷

これを保存して名刺の画像データ入稿を受け付けてくれる業者をさがして印刷してもらえばできると思われる.

なお, 自分は費用をケチりたかったので, A4 用紙に複数枚の名刺を印刷できるように, gridExtra パッケージで 3x3 枚の名刺画像を貼りあわせた pdf を作成した.

ggsave("samples.pdf", device=cairo_pdf, width = 91 * 3, height = 55 * 3, unit = "mm", dpi = 350,
       plot = grid.arrange(grobs = lapply(replicate(9, p, F), "+",
                                          theme(plot.margin = grid::unit(rep(0, 4), "mm"),
                                          axis.ticks.length = grid::unit(rep(0, 4), "mm"))
                                          ),
                           ncol=3)
       )

R だけで画像ファイルを操作するのは大変なので, 上記で作成した pdf を imagemagick で整形した*2.

convert -rotate 90 -density 350 samples.pdf samples2.pdf
convert -density 350 -background "#FFFFFF" -extent 2894x4093 -gravity center samples2.pdf samples_a4.pdf

f:id:ill-identified:20180119172921p:plain

近場で名刺用の厚紙に印刷してくる事業者にキンコーズがあったため, ここに持ち込んで印刷・断裁を行って名刺を作成した. しかし, はっきり言ってこのやり方はおすすめしない. 店舗によるのかもしれないが, キンコーズで貸し出ししてくれた断裁機は定形サイズの紙の断裁しかできなかったため, 印刷された名刺をカッターナイフで切り分ける羽目になった. キンコーズは名刺の印刷もやってくれるため, 工作の苦手な人はおとなしくそちらを利用しよう.


*1:ただし, この後の入稿時に必要になる場合もある

*2:なるべく外部ライブラリに頼らないように, magick パッケージを使わない実装をしたが結局使うことに……