Anotasi dan penekanan

Judul yang menyatakan temuan serta panah dan warna yang membawa bobot.

Daftar isi

Topik ini menambahkan lapisan komunikasi pada grafik yang sudah benar secara teknis, yaitu judul yang menyatakan temuan, anotasi yang menunjuk satu titik penting, dan penekanan warna yang membedakan konteks dari pesan. Ketiganya dikerjakan pada dataset kanonik jalur menggunakan matplotlib. Setelah topik ini, sebuah grafik tidak lagi hanya menampilkan data, tetapi juga menyatakan apa yang harus dibaca darinya.

Judul yang menyatakan temuan#

Judul grafik dapat berfungsi ganda, yaitu mendeskripsikan isinya atau menyatakan temuannya. Judul deskriptif seperti Grafik literasi dan matematika hanya menamai kedua variabel dan tidak menambah pengetahuan di atas gambar yang memang sudah terbaca. Judul temuan menyatakan hasil pembacaan itu sendiri, misalnya Literasi Dewi di atas rata-rata, matematikanya di bawah rata-rata. Pembaca yang menyalin grafik ke laporan atau presentasi membawa judulnya ikut bekerja, karena judul temuan tetap menyampaikan pesan meskipun grafiknya dibaca tanpa penjelasan lisan apa pun.

Judul temuan bukan opini. Kalimatnya harus dapat dipertanggungjawabkan oleh angka yang telah dihitung, dan perhitungan itu ditempatkan pada keluaran skrip. Pada dataset kanonik, rata-rata literasi 24 siswa adalah 77.04 dan rata-rata matematikanya 79.5, sehingga pernyataan tentang Dewi yang membaca di atas rata-rata sambil bernilai matematika di bawah rata-rata didukung penuh oleh dua angka tersebut. Kalimat judul dan angka keluaran berpasangan, sehingga keduanya saling menguji.

Anatomi anotasi pada matplotlib#

Fungsi ax.annotate() menempatkan teks di dekat satu titik dan menghubungkannya dengan panah. Parameter xy menunjuk titik data yang dijelaskan, parameter xytext menentukan posisi teks dalam koordinat data yang sama, dan parameter arrowprops mengatur bentuk serta warna panahnya. Teks anotasi yang baik tetap singkat, yaitu satu baris yang menamai titik dan nilai pentingnya, sedangkan penjelasan panjang tetap diberikan pada prosa atau laporan. Posisi teks juga membutuhkan ruang kosong pada gambar, sehingga penempatannya menuntut pembacaan pola titik terlebih dahulu agar teks tidak menutup data lain.

Panah bekerja sebagai penunjuk selektif. Mata pembaca menemukan elemen yang berwarna berbeda terlebih dahulu, lalu panah mengarahkan langkah berikutnya ke titik yang dimaksud pembuat grafik. Perpaduan warna dan panah menggantikan sebagian besar kebutuhan penjelasan lisan, karena keduanya menjawab pertanyaan titik mana yang penting pada satu kali pandang.

Dua versi pada data yang sama#

Skrip anotasi.py membaca nilai_ujian.csv dari bundle topik ini, membangun dua versi dari data yang sama, dan menyimpan keduanya sebagai SVG. Versi pertama menggunakan judul deskriptif, satu warna untuk semua titik, dan legenda. Versi kedua menggunakan judul temuan, konteks abu-abu, satu titik pesan berwarna penuh, satu panah, dan tanpa legenda. Jalankan skrip berikut dari direktori topiknya.

python anotasi.py
import csv

import matplotlib.pyplot as plt
import numpy as np

with open("nilai_ujian.csv", newline="", encoding="utf-8") as f:
    baris = list(csv.DictReader(f))

nama = [r["siswa"] for r in baris]
literasi = [int(r["nilai_literasi"]) for r in baris]
matematika = [int(r["nilai_matematika"]) for r in baris]

# versi polos: judul deskriptif, satu warna, legenda
fig, ax = plt.subplots(figsize=(6, 3.5))
ax.scatter(literasi, matematika, label="Siswa")
ax.set_title("Grafik literasi dan matematika")
ax.set_xlabel("Nilai literasi")
ax.set_ylabel("Nilai matematika")
ax.legend()
fig.savefig("anotasi-polos.svg")

# versi beranotasi: judul temuan, konteks abu-abu, satu titik pesan berwarna penuh
i_dewi = nama.index("Dewi")
x, y = literasi[i_dewi], matematika[i_dewi]
fig, ax = plt.subplots(figsize=(6, 3.5))
ax.scatter(literasi, matematika, color="#B0B0B0", s=28)
ax.scatter([x], [y], color="#d62728", s=70)
ax.annotate(
    "Dewi (79, 68)",
    xy=(x, y), xytext=(86, 64),
    ha="center", va="center",
    arrowprops=dict(arrowstyle="->", color="#333333"),
)
ax.set_title("Literasi Dewi di atas rata-rata, matematikanya di bawah", fontsize=10)
ax.set_xlabel("Nilai literasi")
ax.set_ylabel("Nilai matematika")
fig.savefig("anotasi-tekan.svg")

print("titik beranotasi :", nama[i_dewi], "literasi =", x, "matematika =", y)
print("rata-rata literasi 24 siswa =", round(float(np.mean(literasi)), 2))
print("rata-rata matematika 24 siswa =", round(float(np.mean(matematika)), 2))
text Keluaran
titik beranotasi : Dewi literasi = 79 matematika = 68
rata-rata literasi 24 siswa = 77.04
rata-rata matematika 24 siswa = 79.5

Pada anotasi-polos.svg, seluruh 24 titik digambar dengan warna default yang sama dan legenda menamai satu-satunya seri. Grafik ini benar dan terbaca, tetapi judulnya tidak menyatakan apa pun di luar nama kedua variabelnya. Pembaca melihat sekumpulan titik tanpa arahan tentang titik mana yang bercerita. Legenda pada grafik satu seri seperti ini mengulang informasi yang sudah jelas, dan seluruh titik mendapat bobot visual yang sama.

Versi polos: judul deskriptif, satu warna, dan legenda yang menamai satu seri

Pada anotasi-tekan.svg, 23 titik lain menjadi konteks berwarna abu-abu #B0B0B0 dengan ukuran lebih kecil, sedangkan titik Dewi digambar berwarna penuh dan lebih besar. Panah dari ax.annotate() menunjuk titik itu dengan teks satu baris berisi nama dan pasangan nilainya, yaitu literasi 79 dan matematika 68. Judul menyatakan temuannya, sehingga tiga lapis arahan bekerja bersama, yaitu judul menyatakan apa yang harus dilihat, warna menunjukkan lokasinya, dan panah menamai titiknya.

Versi beranotasi: judul temuan, konteks abu-abu, satu titik pesan berwarna penuh, dan panah penunjuk

Penekanan bekerja karena sifatnya yang jarang. Konteks abu-abu menurunkan bobot visual sebagian besar data, dan kontras itu justru yang membuat satu titik berwarna penuh ditemukan mata dalam sekejap tanpa bantuan animasi. Apabila lima titik diberi warna penuh sekaligus, kontras hilang dan pembaca kembali menghadapi sekumpulan titik yang sama pentingnya. Satu elemen pesan pada satu grafik adalah patokan yang digunakan di sini, dan lebih dari satu elemen berarti grafiknya sebaiknya dipecah menjadi beberapa grafik.

Legenda dihilangkan pada versi beranotasi karena tidak ada lagi seri yang perlu dinamai. Makna warna abu-abu dan merah sudah dinyatakan oleh judul serta teks anotasi, sehingga kotak legenda hanya akan mengulang informasi yang sama dengan kata-kata lain.

Ringkasan#

  • Judul temuan menyatakan hasil pembacaan dan didukung angka yang dihitung, berbeda dari judul deskriptif yang hanya menamai variabelnya.
  • ax.annotate() menunjuk satu titik dengan panah dan teks pendek melalui parameter xy, xytext, dan arrowprops.
  • Penekanan warna memisahkan konteks abu-abu dari satu elemen pesan berwarna penuh, dan legenda dapat dihilangkan apabila judul serta anotasi sudah menyatakan makna warna tersebut.

Referensi#