📋 このステップで学ぶこと
- アクセシビリティ(Accessibility)の重要性
- 色覚バリアフリー(色覚多様性への配慮)
- コントラスト比と視認性
- テキスト情報の提供(alt属性、説明文)
- スクリーンリーダー対応
- ユニバーサルデザインの7原則
♿ 1. アクセシビリティとは
なぜアクセシビリティを学ぶのか
アクセシビリティ(Accessibility)とは、年齢、能力、状況に関わらず、すべての人が情報にアクセスできることです。
例えば、赤と緑を使ったグラフは、色覚多様性を持つ人(約5%の男性)には区別が困難です。また、色だけで情報を伝えるグラフは、視覚障害者がスクリーンリーダーで理解することができません。
アクセシブルなグラフを作ることは、「特別な配慮」ではなく、「すべての人にとって使いやすいデザイン」です。
【アクセシビリティが必要な理由】
【多様な利用者がいる】
・色覚多様性(色盲・色弱): 男性の約5%(日本では約300万人)
・視覚障害(全盲・弱視): 約31万人(日本)
・高齢者(視力低下): 増加中
・一時的な制約: 明るい屋外での閲覧、片手がふさがっているなど
【法的要件がある】
・米国: ADA(障害を持つアメリカ人法)
・欧州: EAA(欧州アクセシビリティ法)
・日本: 障害者差別解消法
・国際基準: WCAG(Web Content Accessibility Guidelines)
【ビジネスメリットがある】
・より多くの人にリーチできる
・ブランドイメージが向上する
・SEO(検索順位)が改善される
・ユーザー満足度が向上する
✅ アクセシブルなデータ可視化の4原則(WCAG準拠)
| 原則 |
意味 |
グラフでの実践 |
| 知覚可能 |
情報を認識できる |
色だけに頼らない、テキスト説明を付ける |
| 操作可能 |
インタラクティブ要素を使える |
キーボードで操作できる、クリック領域が十分 |
| 理解可能 |
情報と操作方法が明確 |
タイトル・軸ラベル・凡例が明確 |
| 堅牢性 |
様々な支援技術で利用可能 |
スクリーンリーダー対応、データテーブル提供 |
💡 アクセシビリティは特別な配慮ではない
アクセシビリティは「障害者のための特別な配慮」ではなく、「すべての人にとって使いやすいデザイン」です。色覚バリアフリーな配色は、すべての人にとって見やすく、明確なラベルは誰にとっても理解しやすい。良いアクセシビリティ = 良いデザインです!
🎨 2. 色覚バリアフリー(色覚多様性への配慮)
色覚多様性とは
色覚多様性(Color Vision Diversity)とは、色の見え方に個人差があることです。一般的に「色盲」「色弱」と呼ばれることもありますが、これは差別的な表現として避けられるようになっています。
🎨 色覚多様性の種類
| 種類 |
特徴 |
割合 |
区別しにくい色 |
| 1型色覚(P型) |
赤色の認識が困難 |
男性の約1.5% |
赤と緑 |
| 2型色覚(D型) |
緑色の認識が困難 |
男性の約3.5%(最も一般的) |
赤と緑 |
| 3型色覚(T型) |
青色の認識が困難 |
約0.001%(非常に稀) |
青と黄色 |
⚠️ 避けるべき配色
- ❌ 赤と緑の組み合わせ: 最も一般的な色覚多様性で区別困難
- ❌ 青と紫の組み合わせ: 類似した色は区別しにくい
- ❌ 暗い色同士の組み合わせ: コントラストが低い
- ❌ 色だけで情報を伝える: 必ず別の方法も併用する
色覚バリアフリーなカラーパレット
科学論文で推奨されるOkabe-Ito カラーパレットを使うと、色覚多様性を持つ人にも区別しやすいグラフが作れます。
【Okabe-Ito カラーパレット】
科学論文で推奨される色覚バリアフリーなパレット:
colorblind_friendly = [
‘#E69F00’, # オレンジ(1番目)
‘#56B4E9’, # スカイブルー(2番目)
‘#009E73’, # 緑(3番目)
‘#F0E442’, # 黄色(4番目)
‘#0072B2’, # 青(5番目)
‘#D55E00’, # 赤オレンジ(6番目)
‘#CC79A7’, # ピンク(7番目)
‘#000000’ # 黒(8番目)
]
【なぜこのパレットが良いのか】
・明度(明るさ)に差がある → 白黒印刷でも区別可能
・色相(色味)に差がある → 色覚多様性でも区別可能
・彩度(鮮やかさ)が適度 → 目に優しい
▼ 入力するコード(悪い例と良い例の比較)
import matplotlib.pyplot as plt
import numpy as np
# 色覚バリアフリーなカラーパレット(Okabe-Ito)
colorblind_friendly = [
‘#E69F00’, # オレンジ
‘#56B4E9’, # スカイブルー
‘#009E73’, # 緑
‘#F0E442’, # 黄色
]
# 悪い例: 赤と緑
bad_colors = [‘red’, ‘green’, ‘blue’, ‘orange’]
# データ
カテゴリ = [‘商品A’, ‘商品B’, ‘商品C’, ‘商品D’]
売上 = [150, 120, 100, 80]
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 5))
# 悪い例: 赤と緑を使用
bars1 = ax1.bar(カテゴリ, 売上, color=bad_colors)
ax1.set_title(‘❌ 悪い例: 赤と緑の組み合わせ\n(色覚多様性の人には区別困難)’,
fontsize=14, fontweight=’bold’, color=’red’)
ax1.set_ylabel(‘売上(万円)’, fontsize=12)
ax1.grid(True, alpha=0.3, axis=’y’)
# 良い例: 色覚バリアフリーパレット
bars2 = ax2.bar(カテゴリ, 売上, color=colorblind_friendly)
ax2.set_title(‘✓ 良い例: 色覚バリアフリーなカラーパレット\n(すべての人に区別可能)’,
fontsize=14, fontweight=’bold’, color=’green’)
ax2.set_ylabel(‘売上(万円)’, fontsize=12)
ax2.grid(True, alpha=0.3, axis=’y’)
plt.tight_layout()
plt.show()
色以外の方法で情報を伝える
色だけに頼らず、線のスタイル(実線・破線)やマーカーの形(丸・四角・三角)も併用することで、色覚多様性を持つ人にも区別しやすくなります。
【色以外で区別する方法】
1. 線のスタイル
・実線(’-‘): 最も基本的
・破線(’–‘): 点線より目立つ
・点線(’:’): 補助的な線
・一点鎖線(’-.’): 目標線など
2. マーカーの形
・丸(’o’): 最も基本的
・四角(’s’): squareの略
・三角(’^’): 上向き三角
・ダイヤ(’D’): Diamond
・プラス(’+’): 交点を示す
3. 線の太さ
・太い線(linewidth=3): 重要なデータ
・細い線(linewidth=1): 補助的なデータ
【組み合わせの例】
系列1: 青 + 実線 + 丸マーカー
系列2: オレンジ + 破線 + 四角マーカー
系列3: 緑 + 点線 + 三角マーカー
▼ 入力するコード(色 + 線スタイル + マーカーで区別)
import matplotlib.pyplot as plt
import numpy as np
# データ
月 = [‘1月’, ‘2月’, ‘3月’, ‘4月’, ‘5月’, ‘6月’]
目標 = [100, 100, 100, 100, 100, 100]
実績 = [90, 105, 95, 110, 98, 115]
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 5))
# 悪い例: 色だけで区別
ax1.plot(月, 目標, color=’red’, linewidth=3, label=’目標’)
ax1.plot(月, 実績, color=’green’, linewidth=3, label=’実績’)
ax1.set_title(‘❌ 悪い例: 色だけで区別’,
fontsize=14, fontweight=’bold’, color=’red’)
ax1.set_ylabel(‘売上(万円)’, fontsize=12)
ax1.legend(fontsize=11)
ax1.grid(True, alpha=0.3)
# 良い例: 色 + 線のスタイル + マーカー
ax2.plot(月, 目標, color=’#0072B2′, linewidth=3,
linestyle=’–‘, marker=’o’, markersize=8, label=’目標’)
ax2.plot(月, 実績, color=’#E69F00′, linewidth=3,
linestyle=’-‘, marker=’s’, markersize=8, label=’実績’)
ax2.set_title(‘✓ 良い例: 色 + 線スタイル + マーカーで区別’,
fontsize=14, fontweight=’bold’, color=’green’)
ax2.set_ylabel(‘売上(万円)’, fontsize=12)
ax2.legend(fontsize=11)
ax2.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
Seabornの色覚バリアフリーパレット
Seabornには“colorblind”という色覚バリアフリーパレットが用意されています。sns.set_palette("colorblind")を実行するだけで、すべてのグラフに適用されます。
【Seabornでの設定方法】
# 方法1: グローバルに設定(すべてのグラフに適用)
sns.set_palette(“colorblind”)
# 方法2: 個別のグラフで設定
sns.barplot(data=df, x=’地域’, y=’売上’, palette=”colorblind”)
【Seabornの色覚バリアフリーパレット一覧】
・”colorblind”: 基本的な色覚バリアフリーパレット
・”muted”: 彩度を抑えたパレット
・”deep”: 濃い色のパレット
・”pastel”: パステル調のパレット(コントラスト注意)
▼ 入力するコード
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
# データ
df = pd.DataFrame({
‘地域’: [‘北海道’, ‘東北’, ‘関東’, ‘中部’, ‘関西’, ‘中国’, ‘四国’, ‘九州’] * 3,
‘年度’: [‘2022年’] * 8 + [‘2023年’] * 8 + [‘2024年’] * 8,
‘売上’: [120, 150, 300, 180, 250, 100, 80, 140,
130, 160, 320, 190, 260, 110, 85, 150,
140, 170, 340, 200, 280, 120, 90, 160]
})
# Seabornの色覚バリアフリーパレットを設定
sns.set_palette(“colorblind”)
fig, ax = plt.subplots(figsize=(12, 6))
sns.barplot(data=df, x=’地域’, y=’売上’, hue=’年度’, ax=ax)
ax.set_title(‘✓ Seabornの色覚バリアフリーパレット’,
fontsize=16, fontweight=’bold’, color=’green’)
ax.set_xlabel(‘地域’, fontsize=12)
ax.set_ylabel(‘売上(万円)’, fontsize=12)
ax.legend(title=’年度’, fontsize=11)
ax.grid(True, alpha=0.3, axis=’y’)
plt.tight_layout()
plt.show()
💡 推奨カラーパレット
| パレット名 |
特徴 |
おすすめ用途 |
| Okabe-Ito |
科学論文で推奨 |
学術発表、レポート |
| ColorBrewer |
地図用に設計、汎用性高い |
地図、カテゴリ比較 |
| Viridis |
明度の変化が大きい |
ヒートマップ、連続値 |
| Seaborn “colorblind” |
すぐに使える |
Seabornでの可視化全般 |
🔍 3. コントラスト比と視認性
コントラスト比とは
コントラスト比とは、前景色(文字など)と背景色の明るさの比です。コントラスト比が高いほど、文字が読みやすくなります。
WCAGでは、通常の文字は4.5:1以上、大きな文字は3:1以上のコントラスト比を推奨しています。
🔍 WCAGのコントラスト比基準
| レベル |
通常の文字 |
大きな文字 |
説明 |
| レベルAA(最低限) |
4.5:1 以上 |
3:1 以上 |
多くのユーザーが読める |
| レベルAAA(推奨) |
7:1 以上 |
4.5:1 以上 |
視力が低下した人も読める |
【コントラスト比の具体例】
良い例(十分なコントラスト):
✓ 黒 (#000000) と 白 (#FFFFFF): 21:1(最高)
✓ 濃い青 (#0072B2) と 白 (#FFFFFF): 8.2:1(良い)
✓ 緑 (#009E73) と 白 (#FFFFFF): 4.8:1(OK)
悪い例(コントラスト不足):
❌ 薄いグレー (#999999) と 白 (#FFFFFF): 2.8:1(不十分)
❌ 黄色 (#FFFF00) と 白 (#FFFFFF): 1.1:1(非常に悪い)
❌ 薄い青 (#ADD8E6) と 白 (#FFFFFF): 1.8:1(読めない)
【確認ツール】
・WebAIM Contrast Checker(無料オンラインツール)
https://webaim.org/resources/contrastchecker/
・Chrome DevTools の Lighthouse レポート
グラフでのコントラストの重要性
グラフの棒や線も、背景とのコントラストが重要です。薄い色を使うと、特に印刷時やプロジェクター投影時に見えにくくなります。
▼ 入力するコード(コントラストの良い例と悪い例)
import matplotlib.pyplot as plt
import numpy as np
# データ
カテゴリ = [‘商品A’, ‘商品B’, ‘商品C’, ‘商品D’]
売上 = [150, 120, 100, 80]
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 5))
# 悪い例: 薄い色と白背景(コントラスト不足)
light_colors = [‘#FFE6E6’, ‘#E6F3FF’, ‘#E6FFE6’, ‘#FFFFE6′]
bars1 = ax1.bar(カテゴリ, 売上, color=light_colors, edgecolor=’gray’)
ax1.set_title(‘❌ 悪い例: 薄い色(コントラスト不足)’,
fontsize=14, fontweight=’bold’, color=’red’)
ax1.set_ylabel(‘売上(万円)’, fontsize=12)
ax1.set_facecolor(‘#FFFFFF’)
# 良い例: 濃い色と白背景(十分なコントラスト)
dark_colors = [‘#E69F00’, ‘#56B4E9’, ‘#009E73’, ‘#F0E442′]
bars2 = ax2.bar(カテゴリ, 売上, color=dark_colors, edgecolor=’black’, linewidth=1.5)
ax2.set_title(‘✓ 良い例: 濃い色(十分なコントラスト)’,
fontsize=14, fontweight=’bold’, color=’green’)
ax2.set_ylabel(‘売上(万円)’, fontsize=12)
ax2.set_facecolor(‘#FFFFFF’)
plt.tight_layout()
plt.show()
📝 4. テキスト情報の提供
なぜテキスト情報が必要か
視覚障害者はスクリーンリーダー(画面読み上げソフト)を使ってWebを閲覧します。グラフの画像だけでは内容が伝わらないため、テキストで説明を付ける必要があります。
【グラフに付けるべきテキスト情報】
1. タイトル
→ グラフの目的を簡潔に説明
例: 「2024年の月別売上推移」
2. 軸ラベル
→ X軸、Y軸が何を表すか明記
例: X軸「月」、Y軸「売上(万円)」
3. 凡例
→ 各系列が何を表すか説明
例: 「目標」「実績」
4. 注釈・説明文
→ 重要なポイントを補足
例: 「3月に売上が急増した理由は新商品発売」
5. データテーブル
→ グラフのデータを表形式で提供
→ スクリーンリーダーで読み上げ可能
6. alt属性(Webの場合)
→ 画像が表示されない場合の代替テキスト
例: alt=”2024年1月から6月までの売上推移を示す折れ線グラフ。
1月90万円から始まり、6月には115万円まで増加している。”
説明文付きのグラフ
グラフの下に説明文を追加することで、グラフの内容を補足できます。
▼ 入力するコード(説明文付きグラフ)
import matplotlib.pyplot as plt
import numpy as np
# データ
月 = [‘1月’, ‘2月’, ‘3月’, ‘4月’, ‘5月’, ‘6月’]
売上 = [90, 105, 95, 110, 98, 115]
fig, ax = plt.subplots(figsize=(10, 6))
# グラフ
ax.plot(月, 売上, marker=’o’, linewidth=3, markersize=10,
color=’#0072B2′, label=’売上’)
# タイトル(目的を明確に)
ax.set_title(‘2024年上半期の月別売上推移\n(目標100万円に対する実績)’,
fontsize=16, fontweight=’bold’, pad=20)
# 軸ラベル(何を表すか明記)
ax.set_xlabel(‘月’, fontsize=12)
ax.set_ylabel(‘売上(万円)’, fontsize=12)
# 目標線を追加
ax.axhline(y=100, color=’red’, linestyle=’–‘, linewidth=2, label=’目標(100万円)’)
# 重要なポイントに注釈
ax.annotate(‘最高売上\n115万円’,
xy=(5, 115), xytext=(4, 120),
arrowprops=dict(arrowstyle=’->’, color=’green’, lw=2),
fontsize=11, color=’green’, fontweight=’bold’,
bbox=dict(boxstyle=’round,pad=0.5′, facecolor=’lightgreen’, alpha=0.7))
# 凡例
ax.legend(fontsize=11, loc=’upper left’)
# グリッド
ax.grid(True, alpha=0.3)
# 説明文を図の下に追加
fig.text(0.5, 0.02,
‘説明: このグラフは2024年1月から6月までの月別売上推移を示しています。\n’
‘6月に最高売上115万円を記録し、目標の100万円を大きく上回りました。’,
ha=’center’, fontsize=10, style=’italic’,
bbox=dict(boxstyle=’round’, facecolor=’wheat’, alpha=0.5))
plt.tight_layout()
plt.subplots_adjust(bottom=0.15) # 説明文のスペース確保
plt.show()
データテーブルの併記
グラフと一緒にデータテーブルを表示すると、スクリーンリーダーユーザーにも情報が伝わります。
▼ 入力するコード(グラフ + データテーブル)
import matplotlib.pyplot as plt
import pandas as pd
# データ
df = pd.DataFrame({
‘月’: [‘1月’, ‘2月’, ‘3月’, ‘4月’, ‘5月’, ‘6月’],
‘売上(万円)’: [90, 105, 95, 110, 98, 115],
‘目標(万円)’: [100, 100, 100, 100, 100, 100],
‘達成率(%)’: [90, 105, 95, 110, 98, 115]
})
fig = plt.figure(figsize=(12, 8))
# グラフ(上段)
ax1 = plt.subplot(2, 1, 1)
ax1.plot(df[‘月’], df[‘売上(万円)’], marker=’o’, linewidth=3,
markersize=10, color=’#0072B2′, label=’売上’)
ax1.axhline(y=100, color=’red’, linestyle=’–‘, linewidth=2, label=’目標’)
ax1.set_title(‘2024年上半期の月別売上推移’, fontsize=16, fontweight=’bold’)
ax1.set_ylabel(‘売上(万円)’, fontsize=12)
ax1.legend(fontsize=11)
ax1.grid(True, alpha=0.3)
# データテーブル(下段)
ax2 = plt.subplot(2, 1, 2)
ax2.axis(‘tight’)
ax2.axis(‘off’)
table = ax2.table(cellText=df.values, colLabels=df.columns,
cellLoc=’center’, loc=’center’,
colColours=[‘#E69F00’] * len(df.columns))
table.auto_set_font_size(False)
table.set_fontsize(11)
table.scale(1, 2)
plt.tight_layout()
plt.show()
# テキスト版データも出力(スクリーンリーダー用)
print(“\n【テキスト版データ】”)
print(df.to_string(index=False))
🔊 5. スクリーンリーダー対応
スクリーンリーダーとは
スクリーンリーダーとは、画面上のテキストや画像を音声で読み上げるソフトウェアです。視覚障害者がコンピュータやWebを使う際に必須のツールです。
🔊 主なスクリーンリーダー
| 名前 |
対応OS |
価格 |
特徴 |
| NVDA |
Windows |
無料 |
オープンソース、高機能 |
| JAWS |
Windows |
有料 |
業界標準、最も高機能 |
| VoiceOver |
Mac / iOS |
標準搭載 |
Apple製品に統合 |
| TalkBack |
Android |
標準搭載 |
Android標準 |
【スクリーンリーダー対応のポイント】
1. セマンティックHTML
✓ 見出しタグ(h1, h2, h3)を正しく使う
✓ リストタグ(ul, ol)を使う
✓ 表タグ(table)を適切に使う
2. alt属性
✓ すべての画像にalt属性を付ける
✓ グラフの内容を文章で説明
✓ 装飾画像は alt=”” で空にする
3. ARIA属性
✓ role属性で要素の役割を明示
✓ aria-label で補足説明
✓ aria-describedby で詳細説明へリンク
4. フォーカス管理
✓ キーボードだけで操作できる
✓ フォーカス順序が論理的
✓ 現在位置が分かる(フォーカスリング)
HTMLでのアクセシビリティ対応例
Webでグラフを公開する場合、以下のようなHTMLを使うとスクリーンリーダーに対応できます。
【アクセシブルなHTMLの例】
<figure role=”img” aria-labelledby=”chart-title” aria-describedby=”chart-desc”>
<!– タイトル –>
<h2 id=”chart-title”>2024年上半期の月別売上推移</h2>
<!– グラフ画像(alt属性で内容を説明) –>
<img src=”chart.png”
alt=”2024年1月から6月までの売上推移を示す折れ線グラフ。
1月90万円から始まり、6月には115万円まで増加している。”>
<!– グラフの詳細説明 –>
<div id=”chart-desc”>
<p>このグラフは2024年上半期の月別売上推移を示しています。</p>
<p>最高売上: 6月の115万円</p>
<p>最低売上: 1月の90万円</p>
</div>
<!– データテーブル(折りたたみ可能) –>
<details>
<summary>データテーブルを表示</summary>
<table>
<caption>2024年上半期月別売上データ</caption>
<thead>
<tr>
<th scope=”col”>月</th>
<th scope=”col”>売上(万円)</th>
</tr>
</thead>
<tbody>
<tr><th scope=”row”>1月</th><td>90</td></tr>
<tr><th scope=”row”>2月</th><td>105</td></tr>
<!– 他の月も同様 –>
</tbody>
</table>
</details>
</figure>
【ポイント】
・figure + role=”img”: グラフ全体をまとめる
・aria-labelledby: タイトルを関連付け
・aria-describedby: 詳細説明を関連付け
・details/summary: 必要な人だけ詳細を見れる
・scope属性: 表の見出しを明確に
🌐 6. ユニバーサルデザインの7原則
ユニバーサルデザインとは
ユニバーサルデザインとは、年齢、能力、状況に関わらず、できるだけ多くの人が利用できるデザインのことです。1980年代にアメリカの建築家ロナルド・メイスによって提唱されました。
🌐 ユニバーサルデザインの7原則
| 原則 |
意味 |
グラフでの実践例 |
| 1. 公平な利用 |
すべての人が同じ方法で利用できる |
色覚バリアフリーな配色 |
| 2. 利用の柔軟性 |
様々な使い方ができる |
グラフとデータテーブルの両方を提供 |
| 3. 単純で直感的 |
経験や知識に関わらず理解できる |
明確なタイトルと軸ラベル |
| 4. 認知できる情報 |
必要な情報が効果的に伝わる |
十分なコントラスト、複数の感覚で情報提供 |
| 5. 失敗への寛容 |
間違えても重大な結果にならない |
ズームやリセット機能 |
| 6. 少ない身体的努力 |
楽に使える |
大きなクリック領域、キーボード操作対応 |
| 7. 適切なサイズと空間 |
十分なスペースと配置 |
タッチデバイスでも操作しやすいボタンサイズ |
ユニバーサルデザインを実践したグラフ
7原則を意識してグラフを作成してみましょう。
▼ 入力するコード
import plotly.express as px
import pandas as pd
# データ
df = pd.DataFrame({
‘地域’: [‘北海道’, ‘東北’, ‘関東’, ‘中部’, ‘関西’, ‘中国’, ‘四国’, ‘九州’],
‘売上’: [120, 150, 300, 180, 250, 100, 80, 140],
‘前年比’: [‘+5%’, ‘+8%’, ‘+12%’, ‘+3%’, ‘+10%’, ‘-2%’, ‘+1%’, ‘+6%’]
})
# 色覚バリアフリーな配色
colors = [‘#E69F00’, ‘#56B4E9’, ‘#009E73’, ‘#F0E442’,
‘#0072B2’, ‘#D55E00’, ‘#CC79A7’, ‘#999999′]
fig = px.bar(df, x=’地域’, y=’売上’,
color=’地域’,
color_discrete_sequence=colors,
title=’2024年の地域別売上
(前年比も表示)‘)
# 各棒に前年比を表示(原則4: 認知できる情報)
for i, row in df.iterrows():
fig.add_annotation(
x=row[‘地域’],
y=row[‘売上’],
text=row[‘前年比’],
showarrow=False,
yshift=10,
font=dict(size=12, color=’black’, family=’Arial Black’)
)
fig.update_layout(
# 原則1: 公平な利用 – 色覚バリアフリーな配色
showlegend=False,
# 原則2: 利用の柔軟性 – ホバー情報
hovermode=’x unified’,
# 原則3: 単純で直感的 – 明確なラベル
xaxis_title=’地域‘,
yaxis_title=’売上(万円)‘,
# 原則4: 認知できる情報 – 十分なフォントサイズとコントラスト
font=dict(size=14, color=’#000000′),
plot_bgcolor=’white’,
# 原則6: 少ない身体的努力 – 大きなクリック領域
bargap=0.2,
# 原則7: 適切なサイズと空間 – 十分な余白
margin=dict(l=60, r=60, t=100, b=60),
height=500
)
# グリッド追加(値の読み取りを容易に)
fig.update_yaxis(showgrid=True, gridwidth=1, gridcolor=’lightgray’)
fig.show()
# テキスト版データも提供(原則2: 利用の柔軟性)
print(“\n【テキスト版データ】”)
print(df.to_string(index=False))
✅ 7. アクセシビリティチェックリスト
公開前に確認すべきポイント
グラフを公開する前に、以下のチェックリストで確認しましょう。
【アクセシビリティチェックリスト】
□ 色覚バリアフリー
□ 赤と緑の組み合わせを避けた
□ 色だけでなく、線スタイルやマーカーでも区別
□ 色覚バリアフリーパレットを使用(Okabe-Ito、ColorBrewerなど)
□ 色覚シミュレーターで確認した
□ コントラスト
□ 文字と背景のコントラスト比が4.5:1以上
□ グラフの線や棒が背景とはっきり区別できる
□ 薄い色を避けた
□ テキスト情報
□ タイトルがある
□ 軸ラベルがある
□ 凡例がある
□ 重要なポイントに注釈がある
□ グラフの説明文がある
□ データテーブルを提供した
□ スクリーンリーダー対応
□ alt属性を付けた(Web画像の場合)
□ セマンティックHTMLを使用
□ ARIA属性を適切に使用
□ キーボードだけで操作できる
□ ユニバーサルデザイン
□ 直感的に理解できる
□ 複数の方法で情報を提供
□ 十分なフォントサイズ(12pt以上)
□ 操作が簡単
□ エラーから回復できる
□ モバイル対応
□ 小さな画面でも見やすい
□ タッチ操作に対応
□ 拡大・縮小できる
📝 STEP 36 のまとめ
✅ このステップで学んだこと
| トピック |
重要ポイント |
| アクセシビリティ |
すべての人が情報にアクセスできることの重要性 |
| 色覚バリアフリー |
色だけに頼らず、線スタイルやマーカーで区別 |
| コントラスト比 |
4.5:1以上を確保して視認性向上 |
| テキスト情報 |
説明文、データテーブル、alt属性の提供 |
| スクリーンリーダー |
音声で読み上げられるグラフ設計 |
| ユニバーサルデザイン |
7原則に基づく誰にでも優しい設計 |
💡 最重要ポイント
アクセシビリティは、「障害者のための特別な配慮」ではなく、「すべての人にとって使いやすいデザイン」です。
色覚バリアフリーな配色、十分なコントラスト、テキスト情報の提供により、すべての人が理解できるグラフを作りましょう。
良いアクセシビリティは、良いデザインです!
📝 実践演習
演習 1
基礎
赤と緑を使ったグラフを、色覚バリアフリーなパレットで作り直してください。
【解答】
Okabe-Itoパレットを使用します。
import matplotlib.pyplot as plt
カテゴリ = [‘A’, ‘B’, ‘C’, ‘D’]
値 = [10, 20, 15, 25]
# 色覚バリアフリーパレット(Okabe-Ito)
colors = [‘#E69F00’, ‘#56B4E9’, ‘#009E73’, ‘#F0E442′]
fig, ax = plt.subplots(figsize=(8, 5))
ax.bar(カテゴリ, 値, color=colors, edgecolor=’black’, linewidth=1.5)
ax.set_title(‘色覚バリアフリーなグラフ’, fontsize=14, fontweight=’bold’)
ax.set_ylabel(‘値’, fontsize=12)
ax.grid(True, alpha=0.3, axis=’y’)
plt.show()
演習 2
応用
折れ線グラフに、色、線スタイル、マーカーの3つで区別を付けてください。
【解答】
各系列に異なる色、線スタイル、マーカーを設定します。
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y1 = [10, 12, 11, 13, 15]
y2 = [8, 10, 12, 11, 14]
fig, ax = plt.subplots(figsize=(10, 6))
# 系列1: 青、実線、丸マーカー
ax.plot(x, y1, color=’#0072B2′, linestyle=’-‘,
marker=’o’, markersize=8, linewidth=2, label=’系列1′)
# 系列2: オレンジ、破線、四角マーカー
ax.plot(x, y2, color=’#E69F00′, linestyle=’–‘,
marker=’s’, markersize=8, linewidth=2, label=’系列2′)
ax.set_title(‘色 + 線スタイル + マーカーで区別’,
fontsize=14, fontweight=’bold’)
ax.set_xlabel(‘X軸’, fontsize=12)
ax.set_ylabel(‘Y軸’, fontsize=12)
ax.legend(fontsize=11)
ax.grid(True, alpha=0.3)
plt.show()
演習 3
発展
アクセシビリティチェックリストを使って、自分のグラフを評価し、改善してください。
【解答例】
【チェック結果】
自己評価:
✓ 色覚バリアフリー → Okabe-Itoパレット使用
✓ コントラスト比 → 4.5:1以上確保
✗ テキスト情報 → 説明文が不足
✗ データテーブル → 提供していない
【改善点】
1. グラフの下に説明文を追加
2. データテーブルを併記
3. alt属性を追加(Web公開の場合)
【改善後】
・fig.text()で説明文を追加
・print(df.to_string())でテキスト版を出力
・再度チェックリストで確認
❓ よくある質問
Q1: すべてのグラフに色覚バリアフリー対応が必要ですか?
はい、基本的にすべてのグラフで対応すべきです。約5%の男性が色覚多様性を持っており、これは決して少なくない割合です。色覚バリアフリーな配色は、すべての人にとって見やすいので、デフォルトで使うことをおすすめします。
Q2: コントラスト比はどうやって確認すればいいですか?
WebAIM Contrast Checkerなどのオンラインツールを使いましょう。前景色と背景色のHEXコードを入力するだけで、コントラスト比を自動計算してくれます。Chrome DevToolsのLighthouseレポートも便利です。
Q3: Pythonで作ったグラフのalt属性はどうすればいいですか?
HTMLエクスポート時にalt属性を追加しましょう。Plotlyのwrite_html()メソッドなどを使う際に、グラフの内容を文章で説明するalt属性を付けます。また、グラフと一緒にデータテーブルも提供することで、スクリーンリーダーユーザーにも情報が伝わります。
Q4: 色覚シミュレーターとは何ですか?
色覚多様性を持つ人にどう見えるかをシミュレートするツールです。「Coblis」や「Color Oracle」などの無料ツールがあります。グラフを作成したら、必ずシミュレーターで確認することをおすすめします。
artnasekai
#artnasekai #学習メモ