0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Matplotlibでマイナス記号が短くなる?見た目を整える一手間

Last updated at Posted at 2025-04-19

はじめに

matplotlibでグラフ作りの終盤を迎えたとき、
軸ラベルをちょっとカスタムしたくなりますよね?

ただ、たとえば目盛りの符号を手動で入れ直したりすると、
下の図のように、ASCIIのハイフン(-)で短く化けて表示されてしまうんですよね。

本当は目盛りにはUnicodeマイナスを使いたい派なのですが、
その一手間って地味に大変で……
「後回しにしたい気持ち」と「やっぱりシャキッとしたい気持ち」が、いつも頭の中でせめぎ合います。


この記事では、Unicodeのマイナス記号(−) を使って、
たったひと手間で印象が変わる、そんな可視化の工夫を紹介します。

原因

Pythonで使われる - は、実はASCIIのハイフン(U+002D)で、数学的なマイナス記号とは異なる文字です。

一方、Unicodeのマイナス記号(U+2212)は、数式やグラフでの見た目が美しくなるように設計されています。

以下に、両者の違いを簡単にまとめてみました。

表示 記法 名前 Unicode
- "-" または "\u002D" HYPHEN-MINUS U+002D
"\N{MINUS SIGN}" または "\u2212" MINUS SIGN U+2212

Pythonコードで符号の種類を確認

以下のコードでは、ASCIIのハイフン (-, U+002D) と Unicodeのマイナス記号 (−, U+2212) の違いを unicodedata モジュールを使って確認しています。
それぞれの記号がどんな名前で登録されていて、コードポイントがどう違うのかが表示されます。
また、実際に == で比較して、同じ文字かどうかも検証しています。

import unicodedata

# ASCIIのハイフン(Hyphen-Minus)
hyphen_minus_1 = "-"
hyphen_minus_2 = "\u002D"

# Unicodeのマイナス記号(Minus Sign)
uni_minus_1 = "\N{MINUS SIGN}"
uni_minus_2 = "\u2212"

# 表示して比較
for label, char in [
    ("hyphen_minus_1", hyphen_minus_1),
    ("hyphen_minus_2", hyphen_minus_2),
    ("uni_minus_1", uni_minus_1),
    ("uni_minus_2", uni_minus_2),
]:
    print(f"{label} = '{char}' | name: {unicodedata.name(char)} | codepoint: U+{ord(char):04X}")

# 比較結果の確認
print("\nEquality check:")
print("hyphen_minus_1 == hyphen_minus_2 →", hyphen_minus_1 == hyphen_minus_2)
print("uni_minus_1 == uni_minus_2       →", uni_minus_1 == uni_minus_2)
print("hyphen_minus_1 == uni_minus_1    →", hyphen_minus_1 == uni_minus_1)

出力結果
image.png

(※ Markdownのコードブロック内では、- と − の見た目の違いがフォントによって崩れることがあります。ここではスクリーンショットで表示しています。)

この結果から、見た目が似ていても、異なるUnicode文字として扱われていることがわかります。

MatplotlibでUnicodeマイナス記号の使用例

実際のコードで、matplotlibのx軸のticksラベルの符号を入れ替えてUnicodeのマイナス記号を適用してみます。

import matplotlib.pyplot as plt
import numpy as np


x = np.linspace(-1.5, 1.5, 100)
y = x**3

fig, ax = plt.subplots()
ax.plot(x, y)

# U+2212(数式用のマイナス)
# uni_minus = \u2212 でも可
uni_minus = "\N{MINUS SIGN}"

# x軸の描画範囲だけを使う
xmin, xmax = ax.get_xlim()
xticks = ax.get_xticks()
visible_xticks = [x for x in xticks if xmin <= x <= xmax]

# 符号の反転(−を明示)
xticklabels = [
    f"{uni_minus}{abs(x)}" if x > 0 else abs(x)
    for x in visible_xticks
]

ax.set_xticks(visible_xticks)
ax.set_xticklabels(xticklabels)

# 視線をx軸に集中させるため
ax.set_yticks([])

plt.title("Unicode Minus on X-axis")
plt.show()

出力結果(X軸の目盛りラベルの反転)
image.png

軸目盛りの符号を手動で反転しても美しいことがわかりますね!


元グラフ、Unicode, ASCII Hyphenマイナスの結果を比較してみる
元グラフ Unicode ASCII Hyphen
image.png image.png image.png

(サンプルコードはGogle Colabこちらから閲覧できます。)

Unicodeのマイナス記号(−)は、ハイフンが長く、元グラフと同じ見た目になります。
一方、軸目盛りを通常の方法で編集すると、ASCIIのハイフン(-)が使われるため、マイナス記号が短く表示されてしまうのがわかると思います。

まとめ

この記事では、matplotlibでラベルをカスタムしたときに、
ハイフンが表示されてしまう原因と、その解決方法について紹介しました。

ハイフンは電話番号では馴染み深いけど、
グラフに出てくると……ちょっとそこは察してほしい、なんて思ってしまいますよね。
でもこういうのって、コードの中で自動的に処理されてるから、
ちゃんと直そうと思ったら、意識して手を加えないとできないんですよね。


あの縮こまった“マイナスのシワ”を、
シャキッと引き伸ばすような。
そんな手助けができたのなら——心から嬉しく思います。

参考

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?