Membuat Heatmap (Color Plot) dengan Seaborn

heatmap seaborn python

Heatmap adalah representasi visual yang menggunakan warna untuk menggambarkan intensitas atau tingkat nilai dari suatu variabel pada grid dua dimensi. Dalam konteks visualisasi data, heatmap sering digunakan untuk memvisualisasikan korelasi atau hubungan antara dua variabel numerik.

Heatmap sering digunakan dalam berbagai bidang untuk memvisualisasikan pola, korelasi, dan perbedaan dalam data numerik. Beberapa penggunaan umum heatmap adalah sebagai berikut:

  1. Analisis korelasi: Heatmap sangat berguna untuk menganalisis korelasi antara variabel dalam dataset. Dengan menggunakan heatmap, kita dapat dengan cepat melihat hubungan positif, negatif, atau tanpa korelasi antara pasangan variabel. Ini membantu dalam mengidentifikasi pola dan memahami bagaimana perubahan pada satu variabel mempengaruhi variabel lainnya.
  2. Identifikasi pola: Heatmap membantu dalam mengidentifikasi pola atau struktur dalam data numerik. Dengan mengatur data dalam bentuk matriks dua dimensi, heatmap memvisualisasikan perbedaan intensitas atau nilai dari suatu variabel di sel-sel grid. Hal ini memungkinkan kita untuk secara visual mengenali pola yang terbentuk, seperti gradien warna yang memperlihatkan perubahan nilai yang bertahap atau kelompok sel dengan intensitas tinggi yang menunjukkan adanya kelompok atau klaster dalam data.
  3. Presentasi data: Heatmap merupakan alat yang efektif untuk menyajikan data secara visual. Dengan menggunakan kombinasi warna yang tepat, anotasi, dan tampilan yang menarik, heatmap dapat membantu audiens memahami dan menggali wawasan dari data dengan lebih mudah. Heatmap juga berguna dalam menyajikan hasil analisis statistik atau model prediktif dalam bentuk yang intuitif dan mudah dipahami misalkan pada confussion matrix.

Pada tulisan ini kita akan membahas pembuatan visualisasi dalam bentuk heatmap menggunakan seaborn. Untuk membuat heatmap pada seaborn kita dapat menggunakan fungsi heatmap. Fungsi ini dapat menerima data dalam format berbeda, seperti matriks numerik atau Dataframe pandas. Pada tutorial ini kita akan menggunakan data simulasi yang dibangkitkan menggunakan numpy.

Python

np.random.seed(100)

# membuat data acak 10 x 10
dummy_data = np.random.randint(0, 100, (10, 10))

dummy_data
# OUTPUT

array([[ 8, 24, 67, 87, 79, 48, 10, 94, 52, 98],
       [53, 66, 98, 14, 34, 24, 15, 60, 58, 16],
       [ 9, 93, 86,  2, 27,  4, 31,  1, 13, 83],
       [ 4, 91, 59, 67,  7, 49, 47, 65, 61, 14],
       [55, 71, 80,  2, 94, 19, 98, 63, 53, 27],
       [56, 30, 48, 47, 39, 38, 44, 18, 64, 56],
       [34, 53, 74, 17, 72, 13, 30, 17, 53, 68],
       [50, 91, 91, 83, 53, 78,  0, 13, 57, 76],
       [ 3, 70,  3, 84, 79, 10, 87, 60,  3, 48],
       [52, 43, 36,  5, 71, 38, 86, 94, 98, 42]])

Membuat Heatmap Dasar

Python

sns.heatmap(dummy_data)
Seaborn Heatmap Python

Pengaturan Anotasi (Teks)

Anotasi atau nilai di dalam setiap kotak dapat ditampilkan dengan mengatur parameter annot=True:

Python

sns.heatmap(dummy_data, annot=True)
Python Seaborn Heatmap

Jika data memiliki nilai desimal, kita dapat memformat tingkat presisinya melalui parameter fmt seperti contoh berikut:

Python

sns.heatmap(dummy_data, annot=True, fmt=".1f")
python seaborn heatmap

Ukuran font pada anotasi dapat diatur pada parameter annot_kws dengan key "fontsize". Selain itu dapat juga dibuat garis jarak antar kotak dengan mengatur parameter linewidth:

Python

sns.heatmap(
    dummy_data,
    annot=True,
    annot_kws={"fontsize": 9},
    linewidth=0.5
)
python heatmap seaborn

Tidak hanya ukuran font saja, bentuk visual dari teks anotasi juga dapat diatur melalui parameter annot_kws, beberapa properti yang dapat digunakan yaitu:

  • fontweight: Mengatur ketebalan font teks anotasi.
  • fontstyle: Mengatur gaya font teks anotasi (misalnya, "normal", "italic", atau "oblique").
  • color: Mengatur warna teks anotasi.
  • rotation: Mengatur rotasi teks anotasi dalam derajat.
  • ha: Mengatur poros horisontal teks anotasi ("center", "right", atau "left").
  • va: Mengatur poros vertikal teks anotasi ("center", "top", atau "bottom").

Python

kws = {
    "fontsize": 9,
    "fontweight": "bold",
    "rotation": 45,
    "ha": "center",
    "va": "center",
}

sns.heatmap(dummy_data, annot=True, annot_kws=kws, linewidth=0.5)
python heatmap seaborn

Pengaturan Color Map

Warna-warna yang digunakan pada heatmap dapat diatur sedemikian rupa melalui parameter cmap. Terdapat cukup banyak color map yang disediakan oleh seaborn, beberapa diantaranya yaitu:

  • "rocket"
  • "magma"
  • "crest"
  • "inferno"
  • "plasma"
  • "viridis"
  • "cividis"
  • "coolwarm"
  • "RdYlBu"
  • "RdYlGn"
  • "husl"

Berikut contoh heatmap menggunakan color map "viridis":

Python

sns.heatmap(dummy_data, cmap="viridis")
Heatmap python seaborn

Contoh heatmap menggunakan color map "plasma":

Python

sns.heatmap(dummy_data, cmap="plasma")
seaborn heatmap python

Selain menggunakan color map yang tersedia, kita juga dapat menggunakan warna-warna dasar tertentu seperti “reds“, "greens", "blues", "purples", dan sebagainya.

Python

sns.heatmap(
    dummy_data,
    annot=True,
    cbar=0,
    linewidths=0.5,
    vmin=0,
    vmax=100,
    square=True,
    cmap="Greens",
)

Python

sns.heatmap(
    dummy_data,
    annot=True,
    cbar=0,
    linewidths=0.5,
    vmin=0,
    vmax=100,
    square=True,
    cmap="Purples",
)
seaborn heatmap python

Color Map Custom

Pengaturan color map dapat dilakukan lebih lanjut dengan menggunakan beberapa fungsi yang tersedia pada seaborn misalnya fungsi diverging_palette. Fungsi ini menerima beberapa parameter yanng dapat ditentukan yaitu:

  • h_neg (integer): Nilai hue (tonalitas warna) untuk warna awal pada palet diverging. Rentang nilai yang diterima adalah 0 hingga 359.
  • h_pos (integer): Nilai hue untuk warna akhir pada palet diverging. Rentang nilai yang diterima adalah 0 hingga 359.
  • s (float, default=75): Tingkat kejenuhan (saturation) warna pada palet. Rentang nilai yang diterima adalah 0 hingga 100.
  • l (float, default=50): Tingkat kecerahan (lightness) warna pada palet. Rentang nilai yang diterima adalah 0 hingga 100.
  • sep (float, default=1): Jarak antara warna pada palet. Semakin besar nilai sep, semakin besar perbedaan warna antara warna awal dan akhir.
  • n (int, default=6): Jumlah warna dalam palet. Semakin besar nilai n, semakin banyak warna yang dihasilkan dalam palet.
  • center ({“light”, “dark”}, default=”light”): Posisi center color pada palet. Jika “light”, center color akan lebih terang; jika “dark”, center color akan lebih gelap.
  • as_cmap (bool, default=False): Jika bernilai True, fungsi akan mengembalikan objek colormap (matplotlib.colors.Colormap) yang dapat digunakan dalam plot; jika False, fungsi akan mengembalikan daftar warna dalam format RGB.

Dengan menggunakan parameter-parameter ini, kita dapat mengkustomisasi palet warna sesuai dengan preferensi dan kebutuhan visualisasi yang diinginkan.

Pada contoh berikut kita membuat heatmap untuk menampilkan data dengan rentang nilai negatif hingga positif serta mengatur pewarnaan menggunakan metode diverging_palette.

Python

np.random.seed(100)

# membangkitkan data acak dari rentang -0.5 sampai 1
dummy_data = np.random.randint(-50, 100, (10, 10)) / 100

cust_cmap = sns.diverging_palette(
    h_neg=0,
    h_pos=120,
    s=75,
    l=50,
    n=10,
    center="light",
    as_cmap=True,
)

sns.heatmap(
    dummy_corr,
    annot=True,
    annot_kws={"fontsize": 9},
    linewidths=0.5,
    square=True,
    cmap=cust_cmap,
)
heatmap seaborn python

Penentuan Titik Tengah Data

Visualisasi yang diperoleh sebelumnya memberikan hasil yang menarik. Namun, jika diperhatikan terdapat beberapa hal seharusnya dapat kita tingkatkan. Pertama, penggunaan dua warna pada dasarnya untuk dapat membedakan secara cepat mana yang bernilai positif atau negatif. Selain itu gradasi warna juga diharapkan dapat secara cepat memberikan informasi mengenai besar kecilnya nilai.

Namun, pada contoh data yang kita gunakan, karena nilai terendah -0.5 dan tertinggi positif 1 atau nilainya tidak seimbang maka gradasi warna yang diperoleh juga tidak begitu seimbang. Misal, terdapat nilai-nilai positif yang memiliki warna merah. Begitu pula dengan gradasi untuk nilai-nilai negatifnya tidak berimbang dengan nilai positifnya.

Untuk mengatasinya kita dapat mengatur parameter central sebagai titik batas pergantian warna. Misalkan dalam contoh ini kita atur dengan nilai 0. Tentunya nilai ini dapat diatur sesuai kebutuhan dan rentang nilai dari data yang dimiliki.

Python

sns.heatmap(
    dummy_corr,
    annot=True,
    annot_kws={"fontsize": 9},
    center=0,
    linewidths=0.5,
    square=True,
    cmap=cust_cmap,
)
seaborn heatmap python

Ringkasan

Pada tutorial ini kita telah membahas mengenai pembuatan heatmap menggunakan fungsi heatmap dari seaborn. Heatmap yang dihasilkan dapat diatur sedemikian rupa tidak hanya untuk menghasilkan visual yang menarik namun juga mudah dibaca. Beberapa pengaturan yang dapat dilakukan meliputi anotasi, color map hingga penentuan titik tengah data.

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *

Daftar Isi