{"id":33490,"date":"2025-11-03T14:01:47","date_gmt":"2025-11-03T11:01:47","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/javascript-ile-etkilesimli-grafikler-olusturma-rehberi\/"},"modified":"2025-11-03T14:01:47","modified_gmt":"2025-11-03T11:01:47","slug":"javascript-ile-etkilesimli-grafikler-olusturma-rehberi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/javascript-ile-etkilesimli-grafikler-olusturma-rehberi\/","title":{"rendered":"JavaScript ile Etkile\u015fimli Grafikler Olu\u015fturma Rehberi"},"content":{"rendered":"<p><body><\/p>\n<p>JavaScript kullanarak web sitenizde dinamik ve etkile\u015fimli veri g\u00f6rselle\u015ftirmeleri olu\u015fturmak m\u0131 istiyorsunuz? Bu kapsaml\u0131 rehber, basit bir \u00e7ubuk grafikten karma\u015f\u0131k dashboard&#8217;lara kadar her \u015feyi ad\u0131m ad\u0131m ele alarak, veri g\u00f6rselle\u015ftirme yolculu\u011funuzda size rehberlik edecek. Temel kavramlardan ba\u015flay\u0131p ileri d\u00fczey tekniklere ve mobil uyumlulu\u011fa kadar, JavaScript&#8217;in grafik yeteneklerini ke\u015ffedin.<\/p>\n<p>G\u00fcn\u00fcm\u00fcz d\u00fcnyas\u0131nda veri, adeta yeni petrol olarak kabul ediliyor. Ancak ham veri y\u0131\u011f\u0131nlar\u0131, tek ba\u015f\u0131na anlam ifade etmez. As\u0131l de\u011feri, bu verilerin i\u015flenmesi, analiz edilmesi ve anla\u015f\u0131l\u0131r bir formata d\u00f6n\u00fc\u015ft\u00fcr\u00fclmesiyle ortaya \u00e7\u0131kar. \u0130\u015fte tam da bu noktada veri g\u00f6rselle\u015ftirme devreye giriyor. Veri g\u00f6rselle\u015ftirme, karma\u015f\u0131k veri setlerini grafikler, tablolar ve haritalar gibi g\u00f6rsel \u00f6\u011feler arac\u0131l\u0131\u011f\u0131yla insan beyninin daha kolay alg\u0131layabilece\u011fi bir hale getirme sanat\u0131d\u0131r. Bir finans raporunda binlerce sat\u0131r say\u0131y\u0131 incelemek yerine, bir \u00e7izgi grafi\u011fin y\u00fckselen veya al\u00e7alan trendini an\u0131nda fark edebilirsiniz. Bir e-ticaret sitesinde hangi \u00fcr\u00fcnlerin daha \u00e7ok sat\u0131ld\u0131\u011f\u0131n\u0131 g\u00f6rmek i\u00e7in say\u0131s\u0131z tablo aras\u0131nda kaybolmak yerine, bir pasta grafikle \u00fcr\u00fcn kategorilerinin sat\u0131\u015f y\u00fczdelerini bir bak\u0131\u015fta anlayabilirsiniz.<\/p>\n<p>Veri g\u00f6rselle\u015ftirmenin faydalar\u0131 saymakla bitmez:<\/p>\n<ul>\n<li><strong>H\u0131zl\u0131 Anlama:<\/strong> Karma\u015f\u0131k bilgilerin h\u0131zl\u0131ca kavranmas\u0131n\u0131 sa\u011flar.<\/li>\n<li><strong>Trendleri Tespit:<\/strong> Veri setlerindeki e\u011filimleri, desenleri ve anormallikleri kolayca ortaya \u00e7\u0131kar\u0131r.<\/li>\n<li><strong>Karar Alma:<\/strong> Daha bilin\u00e7li ve verilere dayal\u0131 kararlar al\u0131nmas\u0131na yard\u0131mc\u0131 olur.<\/li>\n<li><strong>\u0130leti\u015fim:<\/strong> Verileri teknik olmayan ki\u015filere dahi anla\u015f\u0131l\u0131r bir \u015fekilde sunar.<\/li>\n<li><strong>Etkile\u015fim:<\/strong> Kullan\u0131c\u0131lar\u0131n verilerle etkile\u015fim kurarak kendi ke\u015fiflerini yapmalar\u0131na olanak tan\u0131r.<\/li>\n<\/ul>\n<p>Peki, bu noktada neden \u00f6zellikle JavaScript&#8217;ten bahsediyoruz? JavaScript, web&#8217;in ana dilidir ve modern web uygulamalar\u0131n\u0131n vazge\u00e7ilmez bir par\u00e7as\u0131d\u0131r. Taray\u0131c\u0131da do\u011frudan \u00e7al\u0131\u015fabilme \u00f6zelli\u011fi sayesinde, herhangi bir ek yaz\u0131l\u0131m y\u00fcklemeden dinamik ve etkile\u015fimli grafikler olu\u015fturmak i\u00e7in m\u00fckemmel bir ara\u00e7t\u0131r. Kullan\u0131c\u0131n\u0131n cihaz\u0131nda, sunucuya tekrar tekrar istek g\u00f6ndermeye gerek kalmadan verileri i\u015fleyebilir ve g\u00f6rselle\u015ftirebilir. Bu, hem performans a\u00e7\u0131s\u0131ndan avantaj sa\u011flar hem de zengin bir kullan\u0131c\u0131 deneyimi sunar. Ayr\u0131ca, JavaScript ekosistemi, veri g\u00f6rselle\u015ftirme i\u00e7in Chart.js, D3.js, Plotly.js gibi g\u00fc\u00e7l\u00fc ve esnek k\u00fct\u00fcphanelerle doludur. Bu k\u00fct\u00fcphaneler, geli\u015ftiricilerin s\u0131f\u0131rdan grafik olu\u015fturma zahmetine girmeden, profesyonel kalitede g\u00f6rseller yaratmalar\u0131na olanak tan\u0131r. Taray\u0131c\u0131lar\u0131n <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/Canvas_API\" target=\"_blank\">HTML Canvas<\/a> ve <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/SVG\" target=\"_blank\">SVG<\/a> gibi geli\u015fmi\u015f \u00e7izim API&#8217;lerini desteklemesiyle birlikte, JavaScript&#8217;in veri g\u00f6rselle\u015ftirmedeki g\u00fcc\u00fc daha da artm\u0131\u015ft\u0131r. Bu teknoloji y\u0131\u011f\u0131n\u0131, g\u00fcncel web projeleri i\u00e7in JavaScript ile grafik olu\u015fturmay\u0131 neredeyse standart bir pratik haline getirmi\u015ftir.<\/p>\n<div class=\"expert-tip\">Uzman \u0130pucu: Veri g\u00f6rselle\u015ftirmenin ba\u015far\u0131s\u0131, sadece g\u00fczel grafikler \u00e7izmekle kalmaz, ayn\u0131 zamanda do\u011fru hikayeyi anlatabilmekle de ilgilidir. Grafi\u011finizin amac\u0131 ve hedef kitleniz, g\u00f6rselle\u015ftirme se\u00e7iminizi do\u011frudan etkilemelidir.<\/div>\n<h2>Temel Kavramlar: JavaScript Grafikleri Neden Bu Kadar Pop\u00fcler?<\/h2>\n<p>JavaScript ile etkile\u015fimli grafikler olu\u015fturman\u0131n ard\u0131ndaki temel teknolojiler ve kavramlar, bu pop\u00fclerli\u011fin anahtar\u0131d\u0131r. \u00d6ncelikle, modern web taray\u0131c\u0131lar\u0131n\u0131n neredeyse tamam\u0131n\u0131n JavaScript&#8217;i desteklemesi, bu dilin yayg\u0131nl\u0131\u011f\u0131n\u0131 ve eri\u015filebilirli\u011fini art\u0131r\u0131r. Geli\u015ftiriciler, yazd\u0131klar\u0131 kodun herhangi bir \u00f6zel eklenti veya yaz\u0131l\u0131m gerektirmeden milyonlarca kullan\u0131c\u0131ya ula\u015faca\u011f\u0131ndan emin olabilirler. Bu durum, \u00f6zellikle geni\u015f kitlelere hitap eden dashboard&#8217;lar, analitik paneller veya interaktif raporlar geli\u015ftiren frontend geli\u015ftiriciler i\u00e7in b\u00fcy\u00fck bir avantajd\u0131r.<\/p>\n<p>JavaScript&#8217;in taray\u0131c\u0131da \u00e7al\u0131\u015fabilmesi, dinamik veri i\u015fleme yeteneklerini beraberinde getirir. \u00d6rne\u011fin, bir API&#8217;den canl\u0131 veri \u00e7ekebilir, bu verileri an\u0131nda i\u015fleyebilir ve kullan\u0131c\u0131 aray\u00fcz\u00fcn\u00fc g\u00fcncelleyebilir. Bu, statik g\u00f6r\u00fcnt\u00fcler yerine s\u00fcrekli g\u00fcncellenen ve kullan\u0131c\u0131 etkile\u015fimine a\u00e7\u0131k grafikler olu\u015fturmak anlam\u0131na gelir. Kullan\u0131c\u0131lar, grafikler \u00fczerinde kayd\u0131rma, yak\u0131nla\u015ft\u0131rma, belirli veri noktalar\u0131na t\u0131klama gibi eylemlerle verileri daha derinlemesine ke\u015ffedebilirler. Bu t\u00fcr bir etkile\u015fim, kullan\u0131c\u0131 deneyimini zenginle\u015ftirirken, verilerin daha iyi anla\u015f\u0131lmas\u0131na da katk\u0131da bulunur. JavaScript&#8217;in DOM (Document Object Model) manip\u00fclasyon yetenekleri sayesinde, HTML \u00f6\u011feleriyle do\u011frudan etkile\u015fim kurarak grafikleri dinamik olarak de\u011fi\u015ftirmek m\u00fcmk\u00fcnd\u00fcr.<\/p>\n<p>Grafik olu\u015fturma s\u00fcrecinde iki ana teknoloji \u00f6ne \u00e7\u0131kar: <strong>HTML Canvas<\/strong> ve <strong>SVG (Scalable Vector Graphics)<\/strong>. Her ikisi de taray\u0131c\u0131da grafik \u00e7izmek i\u00e7in kullan\u0131l\u0131r ancak farkl\u0131 yakla\u015f\u0131mlara sahiptir:<\/p>\n<ul>\n<li>\n            <strong>HTML Canvas:<\/strong><\/p>\n<p>Bir tuval gibidir. JavaScript komutlar\u0131yla piksel baz\u0131nda \u00e7izim yapman\u0131z\u0131 sa\u011flar. Oyunlar, karma\u015f\u0131k animasyonlar ve y\u00fcksek performans gerektiren veri g\u00f6rselle\u015ftirmeleri i\u00e7in idealdir. \u00c7izim yap\u0131ld\u0131ktan sonra, bu \u00e7izimler DOM&#8217;un bir par\u00e7as\u0131 de\u011fildir; bu da \u00e7ok say\u0131da \u00f6\u011fe i\u00e7eren grafiklerde performans avantaj\u0131 sa\u011flayabilir. Ancak, Canvas \u00fczerinde \u00e7izilen \u00f6\u011feler do\u011frudan eri\u015filemez oldu\u011fu i\u00e7in, her bir \u00f6\u011feye t\u0131klama gibi etkile\u015fimler i\u00e7in daha fazla kod yazmak gerekir.<\/p>\n<\/li>\n<li>\n            <strong>SVG:<\/strong><\/p>\n<p>Vekt\u00f6rel grafik tan\u0131mlamak i\u00e7in XML tabanl\u0131 bir dil kullan\u0131r. Her \u00e7izim \u00f6\u011fesi (daire, dikd\u00f6rtgen, \u00e7izgi vb.) DOM&#8217;da ayr\u0131 bir \u00f6\u011fe olarak bulunur. Bu, SVG \u00f6\u011felerine CSS ile stil uygulamay\u0131 ve JavaScript ile kolayca manip\u00fcle etmeyi m\u00fcmk\u00fcn k\u0131lar. Kalite kayb\u0131 olmaks\u0131z\u0131n \u00f6l\u00e7eklenebilir olmas\u0131, farkl\u0131 ekran boyutlar\u0131na uyum sa\u011flamas\u0131 a\u00e7\u0131s\u0131ndan b\u00fcy\u00fck bir avantajd\u0131r. \u0130nteraktif haritalar, infografikler ve \u00f6l\u00e7eklenebilir logolar i\u00e7in s\u0131k\u00e7a tercih edilir. Her bir \u00f6\u011fenin DOM&#8217;da yer almas\u0131, \u00e7ok y\u00fcksek say\u0131da \u00f6\u011fe i\u00e7eren durumlarda performans d\u00fc\u015f\u00fc\u015f\u00fcne neden olabilir.<\/p>\n<\/li>\n<\/ul>\n<p>JavaScript&#8217;in g\u00fcc\u00fc, bu temel teknolojileri soyutlayan ve geli\u015ftiricilere daha y\u00fcksek seviyeli bir API sunan k\u00fct\u00fcphanelerde yatar. <strong>Chart.js<\/strong>, kullan\u0131m\u0131 kolay ve responsive grafikler olu\u015fturmak i\u00e7in harikad\u0131r. <strong>D3.js (Data-Driven Documents)<\/strong>, verileri do\u011frudan DOM&#8217;a ba\u011flayarak Canvas veya SVG \u00fczerinde inan\u0131lmaz derecede \u00f6zelle\u015ftirilebilir ve g\u00fc\u00e7l\u00fc g\u00f6rselle\u015ftirmeler yapman\u0131z\u0131 sa\u011flar. <strong>Plotly.js<\/strong>, interaktif 3D grafikler ve bilimsel g\u00f6rselle\u015ftirmeler i\u00e7in pop\u00fclerdir. Bu k\u00fct\u00fcphaneler, JavaScript ile grafik olu\u015fturma s\u00fcrecini h\u0131zland\u0131r\u0131r, karma\u015f\u0131kl\u0131\u011f\u0131 azalt\u0131r ve profesyonel sonu\u00e7lar elde etmeyi m\u00fcmk\u00fcn k\u0131lar. Bu y\u00fczden JavaScript, veri g\u00f6rselle\u015ftirme ve modern web geli\u015ftirmede kritik bir rol oynar.<\/p>\n<h2>Ad\u0131m Ad\u0131m: Basit Bir \u00c7ubuk Grafik Nas\u0131l Olu\u015fturulur? (Chart.js ile)<\/h2>\n<p>JavaScript ile etkile\u015fimli grafik olu\u015fturman\u0131n pratik d\u00fcnyas\u0131na ad\u0131m atal\u0131m. En pop\u00fcler ve kullan\u0131m\u0131 kolay k\u00fct\u00fcphanelerden biri olan Chart.js&#8217;i kullanarak basit bir \u00e7ubuk grafik nas\u0131l olu\u015fturulur, ad\u0131m ad\u0131m inceleyelim. Bu \u00f6rnek, temel bir veri g\u00f6rselle\u015ftirme projesini ba\u015flatmak i\u00e7in sa\u011flam bir temel sa\u011flayacakt\u0131r.<\/p>\n<h3>1. Chart.js K\u00fct\u00fcphanesini Projenize Nas\u0131l Dahil Edebilirsiniz?<\/h3>\n<p>Chart.js&#8217;i kullanmaya ba\u015flamak i\u00e7in \u00f6ncelikle k\u00fct\u00fcphaneyi HTML dosyan\u0131za eklemeniz gerekir. Bunun en kolay yolu, bir CDN (Content Delivery Network) kullanmakt\u0131r. <code><head><\/code> veya <code><body><\/code> etiketleri aras\u0131na a\u015fa\u011f\u0131daki <code><script><\/code> etiketini ekleyebilirsiniz. Genellikle performans i\u00e7in <code><body><\/code> etiketinin kapan\u0131\u015f\u0131ndan hemen \u00f6nce eklemek tercih edilir:<\/p>\n<pre><code class=\"language-html\"><!-- HTML dosyan\u0131zda -->\n<!DOCTYPE html>\n<html lang=\"tr\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Basit \u00c7ubuk Grafik \u00d6rne\u011fi<\/title>\n<\/head>\n<body>\n    <h1>Ayl\u0131k Sat\u0131\u015f Raporu<\/h1>\n    <div style=\"width: 80%; margin: auto;\">\n        <canvas id=\"myChart\"><\/canvas>\n    <\/div>\n\n    <!-- Chart.js k\u00fct\u00fcphanesini ekleyin -->\n    <script src=\"https:\/\/cdn.jsdelivr.net\/npm\/chart.js\"><\/script>\n    <!-- Kendi JavaScript kodunuz buraya gelecek -->\n    <script src=\"app.js\"><\/script>\n<\/body>\n<\/html>\n<\/pre>\n<p><\/code><\/p>\n<p>Bu kod blo\u011fu i\u00e7inde, k\u00fct\u00fcphane y\u00fcklendikten sonra kendi <code class=\"language-javascript\">app.js<\/code> dosyan\u0131z\u0131 \u00e7a\u011f\u0131r\u0131yoruz. Bu, k\u00fct\u00fcphanenin fonksiyonlar\u0131n\u0131 kullanmaya ba\u015flamadan \u00f6nce haz\u0131r olmas\u0131n\u0131 sa\u011flar.<\/p>\n<h3>2. Grafik \u0130\u00e7in HTML Yap\u0131s\u0131 Nas\u0131l Olmal\u0131?<\/h3>\n<p>Chart.js, grafik \u00e7izmek i\u00e7in bir HTML <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/Canvas_API\" target=\"_blank\"><code><canvas><\/code><\/a> eleman\u0131na ihtiya\u00e7 duyar. Bu eleman\u0131 sayfan\u0131za ekleyip benzersiz bir <code class=\"language-html\">id<\/code> vermeniz yeterlidir. Yukar\u0131daki HTML \u00f6rne\u011finde zaten bir <code class=\"language-html\"><canvas id=\"myChart\"><\/canvas><\/code> eleman\u0131 ekledik.<\/p>\n<p>Grafi\u011finizin boyutunu kontrol etmek i\u00e7in, <code class=\"language-html\"><canvas><\/code> eleman\u0131n\u0131 bir <code class=\"language-html\"><\/p>\n<div><\/code> i\u00e7ine al\u0131p bu <code class=\"language-html\"><\/p>\n<div><\/code>'e geni\u015flik (<code class=\"language-css\">width<\/code>) veya maksimum geni\u015flik (<code class=\"language-css\">max-width<\/code>) verebilirsiniz. Chart.js, kapsay\u0131c\u0131ya g\u00f6re otomatik olarak boyutlan\u0131r ve responsive \u00f6zellikler sunar.<\/p>\n<h3>3. JavaScript Kodu ile Grafi\u011fi Nas\u0131l Tan\u0131mlars\u0131n\u0131z?<\/h3>\n<p>\u015eimdi s\u0131ra, <code class=\"language-javascript\">app.js<\/code> dosyan\u0131zda grafi\u011fi olu\u015fturacak JavaScript kodunu yazmaya geldi. \u0130\u015fte temel bir \u00e7ubuk grafik i\u00e7in gerekli kod:<\/p>\n<pre><code class=\"language-javascript\">\/\/ app.js dosyas\u0131\ndocument.addEventListener('DOMContentLoaded', function() {\n    \/\/ 1. Canvas elementini se\u00e7in\n    const ctx = document.getElementById('myChart').getContext('2d');\n\n    \/\/ 2. Grafik verilerinizi haz\u0131rlay\u0131n\n    const labels = ['Ocak', '\u015eubat', 'Mart', 'Nisan', 'May\u0131s', 'Haziran'];\n    const data = {\n        labels: labels,\n        datasets: [{\n            label: 'Ayl\u0131k Sat\u0131\u015flar', \/\/ Grafik ba\u015fl\u0131\u011f\u0131\n            data: [1200, 1900, 3000, 5000, 2300, 3200], \/\/ Veri noktalar\u0131\n            backgroundColor: [ \/\/ Her \u00e7ubuk i\u00e7in farkl\u0131 renkler\n                'rgba(255, 99, 132, 0.6)',\n                'rgba(54, 162, 235, 0.6)',\n                'rgba(255, 206, 86, 0.6)',\n                'rgba(75, 192, 192, 0.6)',\n                'rgba(153, 102, 255, 0.6)',\n                'rgba(255, 159, 64, 0.6)'\n            ],\n            borderColor: [ \/\/ \u00c7ubuk kenarl\u0131k renkleri\n                'rgba(255, 99, 132, 1)',\n                'rgba(54, 162, 235, 1)',\n                'rgba(255, 206, 86, 1)',\n                'rgba(75, 192, 192, 1)',\n                'rgba(153, 102, 255, 1)',\n                'rgba(255, 159, 64, 1)'\n            ],\n            borderWidth: 1 \/\/ \u00c7ubuk kenarl\u0131k geni\u015fli\u011fi\n        }]\n    };\n\n    \/\/ 3. Grafik yap\u0131land\u0131rma se\u00e7eneklerini belirleyin\n    const config = {\n        type: 'bar', \/\/ Grafik tipi: 'bar', 'line', 'pie', vb.\n        data: data,\n        options: {\n            responsive: true, \/\/ Grafi\u011fin kapsay\u0131c\u0131ya g\u00f6re boyutlanmas\u0131n\u0131 sa\u011flar\n            plugins: {\n                title: {\n                    display: true,\n                    text: '2023 Y\u0131l\u0131 \u0130lk Yar\u0131s\u0131 Ayl\u0131k Sat\u0131\u015f Verileri', \/\/ Grafi\u011fin genel ba\u015fl\u0131\u011f\u0131\n                    font: {\n                        size: 18\n                    }\n                },\n                legend: {\n                    display: true, \/\/ Legend'i g\u00f6ster\n                    position: 'top' \/\/ Legend'i \u00fcstte g\u00f6ster\n                }\n            },\n            scales: {\n                y: {\n                    beginAtZero: true, \/\/ Y eksenini s\u0131f\u0131rdan ba\u015flat\n                    title: {\n                        display: true,\n                        text: 'Sat\u0131\u015f Miktar\u0131 (\u20ba)'\n                    }\n                },\n                x: {\n                    title: {\n                        display: true,\n                        text: 'Aylar'\n                    }\n                }\n            }\n        }\n    };\n\n    \/\/ 4. Yeni bir Chart \u00f6rne\u011fi olu\u015fturun ve grafi\u011fi \u00e7izin\n    new Chart(ctx, config);\n});\n<\/pre>\n<p><\/code><\/p>\n<p>Yukar\u0131daki kodda s\u0131ras\u0131yla \u015fu ad\u0131mlar\u0131 izledik:<\/p>\n<ol>\n<li><code class=\"language-javascript\">DOMContentLoaded<\/code> event listener'\u0131 ile HTML i\u00e7eri\u011fi y\u00fcklendikten sonra kodun \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flad\u0131k.<\/li>\n<li><code class=\"language-html\"><canvas><\/code> elementini <code class=\"language-javascript\">id<\/code> ile se\u00e7ip onun 2D \u00e7izim ba\u011flam\u0131n\u0131 (<code class=\"language-javascript\">context<\/code>) ald\u0131k.<\/li>\n<li>Grafikte g\u00f6sterilecek verileri (<code class=\"language-javascript\">labels<\/code> ve <code class=\"language-javascript\">data<\/code>) tan\u0131mlad\u0131k. <code class=\"language-javascript\">datasets<\/code> dizisi, birden fazla veri serisi eklemenize olanak tan\u0131r.<\/li>\n<li>Grafi\u011fin nas\u0131l g\u00f6r\u00fcnmesi gerekti\u011fini belirleyen <code class=\"language-javascript\">config<\/code> nesnesini olu\u015fturduk. Burada grafik tipini (<code class=\"language-javascript\">type: 'bar'<\/code>), veri kayna\u011f\u0131n\u0131 (<code class=\"language-javascript\">data<\/code>) ve \u00e7e\u015fitli g\u00f6r\u00fcn\u00fcm se\u00e7eneklerini (<code class=\"language-javascript\">options<\/code>) ayarlad\u0131k. <code class=\"language-javascript\">responsive: true<\/code> se\u00e7ene\u011fi, grafi\u011fin kapsay\u0131c\u0131s\u0131n\u0131n boyutuna g\u00f6re otomatik olarak ayarlanmas\u0131n\u0131 sa\u011flar ki bu, mobil uyumluluk i\u00e7in \u00e7ok \u00f6nemlidir.<\/li>\n<li>Son olarak, <code class=\"language-javascript\">new Chart(ctx, config);<\/code> ile yeni bir Chart \u00f6rne\u011fi olu\u015fturarak grafi\u011fi Canvas \u00fczerine \u00e7izdirdik.<\/li>\n<\/ol>\n<p>Bu temel \u00f6rnekle, JavaScript ve Chart.js kullanarak nas\u0131l kolayca bir veri g\u00f6rselle\u015ftirmesi olu\u015fturabilece\u011finizi g\u00f6rm\u00fc\u015f olduk. Art\u0131k verilerinizi dinamik olarak bu yap\u0131ya entegre edebilir ve daha karma\u015f\u0131k grafik t\u00fcrlerine ge\u00e7i\u015f yapabilirsiniz.<\/p>\n<h2>Farkl\u0131 Grafik T\u00fcrleri ve Kullan\u0131m Alanlar\u0131: Hangi Grafi\u011fi Ne Zaman Kullanmal\u0131?<\/h2>\n<p>Veri g\u00f6rselle\u015ftirmenin g\u00fcc\u00fc, do\u011fru veriyi do\u011fru grafik t\u00fcr\u00fcyle e\u015fle\u015ftirmekten gelir. Her grafik t\u00fcr\u00fc, belirli bir t\u00fcrdeki bilgiyi en etkili \u015fekilde iletmek i\u00e7in tasarlanm\u0131\u015ft\u0131r. \u0130\u015fte en yayg\u0131n grafik t\u00fcrleri, kullan\u0131m alanlar\u0131 ve ne zaman tercih edilmeleri gerekti\u011fi:<\/p>\n<h3>1. \u00c7izgi Grafikler (Line Charts): Trendleri ve De\u011fi\u015fimi G\u00f6stermek \u0130\u00e7in<\/h3>\n<p>\u00c7izgi grafikler, zaman i\u00e7indeki veri de\u011fi\u015fimlerini veya farkl\u0131 kategoriler aras\u0131ndaki s\u00fcrekli e\u011filimleri g\u00f6stermek i\u00e7in idealdir. Genellikle yatay eksende zaman (g\u00fcn, ay, y\u0131l) ve dikey eksende \u00f6l\u00e7\u00fclen de\u011fer (sat\u0131\u015f, s\u0131cakl\u0131k, hisse senedi fiyat\u0131) bulunur. \u00d6rne\u011fin, bir \u015firketin son be\u015f y\u0131ldaki gelir art\u0131\u015f\u0131n\u0131, bir \u00fcr\u00fcn\u00fcn ayl\u0131k kullan\u0131c\u0131 say\u0131s\u0131ndaki de\u011fi\u015fimi veya hava s\u0131cakl\u0131\u011f\u0131n\u0131n g\u00fcn i\u00e7indeki dalgalanmalar\u0131n\u0131 g\u00f6stermek i\u00e7in \u00e7izgi grafikler tercih edilir. \u00c7ok say\u0131da veri noktas\u0131 i\u00e7eren veya s\u00fcrekli veri ak\u0131\u015f\u0131n\u0131 izleyen senaryolarda \u00f6zellikle etkilidirler. Birden fazla \u00e7izgi ile farkl\u0131 veri setlerini ayn\u0131 grafik \u00fczerinde kar\u015f\u0131la\u015ft\u0131rmak da m\u00fcmk\u00fcnd\u00fcr.<\/p>\n<pre><code class=\"language-javascript\">const lineChartConfig = {\n    type: 'line',\n    data: {\n        labels: ['Ocak', '\u015eubat', 'Mart', 'Nisan', 'May\u0131s'],\n        datasets: [{\n            label: '\u00dcr\u00fcn A Sat\u0131\u015flar\u0131',\n            data: [65, 59, 80, 81, 56],\n            borderColor: 'rgb(75, 192, 192)',\n            tension: 0.1\n        }, {\n            label: '\u00dcr\u00fcn B Sat\u0131\u015flar\u0131',\n            data: [28, 48, 40, 19, 86],\n            borderColor: 'rgb(255, 99, 132)',\n            tension: 0.1\n        }]\n    },\n    options: { \/* ... *\/ }\n};\n<\/pre>\n<p><\/code><\/p>\n<h3>2. Pasta Grafikler (Pie Charts): Oranlar\u0131 ve Par\u00e7alar\u0131n B\u00fct\u00fcne Oran\u0131n\u0131 G\u00f6stermek \u0130\u00e7in<\/h3>\n<p>Pasta grafikler, bir b\u00fct\u00fcn\u00fcn par\u00e7alar\u0131n\u0131 veya kategorik verilerin oranlar\u0131n\u0131 g\u00f6rselle\u015ftirmek i\u00e7in kullan\u0131l\u0131r. Her dilim, toplam\u0131n bir y\u00fczdesini temsil eder. \u00d6rne\u011fin, pazar paylar\u0131n\u0131, anket sonu\u00e7lar\u0131ndaki oy oranlar\u0131n\u0131 veya bir b\u00fct\u00e7enin farkl\u0131 kalemlere nas\u0131l da\u011f\u0131ld\u0131\u011f\u0131n\u0131 g\u00f6stermek i\u00e7in pasta grafikler idealdir. Ancak, \u00e7ok fazla dilim oldu\u011funda veya dilimler aras\u0131ndaki farklar \u00e7ok k\u00fc\u00e7\u00fck oldu\u011funda okunmas\u0131 zorla\u015fabilirler. Genellikle 5-7'den fazla kategori olmad\u0131\u011f\u0131nda en etkili olurlar. Ayn\u0131 zamanda \"donut\" (halka) grafikleri de ayn\u0131 amaca hizmet eder ancak ortas\u0131nda bo\u015f bir alan b\u0131rakarak daha fazla bilgi veya metin eklemeye olanak tan\u0131r.<\/p>\n<pre><code class=\"language-javascript\">const pieChartConfig = {\n    type: 'pie',\n    data: {\n        labels: ['Elektronik', 'Giyim', 'Ev E\u015fyalar\u0131', 'Kitap'],\n        datasets: [{\n            data: [300, 50, 100, 70],\n            backgroundColor: ['#FF6384', '#36A2EB', '#FFCE56', '#4BC0C0']\n        }]\n    },\n    options: { \/* ... *\/ }\n};\n<\/pre>\n<p><\/code><\/p>\n<h3>3. \u00c7ubuk Grafikler (Bar Charts): Kategorik Verileri Kar\u015f\u0131la\u015ft\u0131rmak \u0130\u00e7in<\/h3>\n<p>Daha \u00f6nce basit bir \u00f6rne\u011fini g\u00f6rd\u00fc\u011f\u00fcm\u00fcz \u00e7ubuk grafikler, farkl\u0131 kategoriler aras\u0131ndaki de\u011ferleri kar\u015f\u0131la\u015ft\u0131rmak i\u00e7in m\u00fckemmeldir. Yatay veya dikey olabilirler. \u00d6rne\u011fin, farkl\u0131 \u00fcr\u00fcnlerin sat\u0131\u015f miktarlar\u0131n\u0131, b\u00f6lgelere g\u00f6re gelirleri veya anketlerdeki farkl\u0131 se\u00e7eneklerin cevap say\u0131lar\u0131n\u0131 kar\u015f\u0131la\u015ft\u0131rmak i\u00e7in kullan\u0131l\u0131rlar. \u00c7ubuk grafikler, pasta grafiklerin aksine, daha fazla kategori ile ba\u015fa \u00e7\u0131kabilir ve de\u011ferler aras\u0131ndaki farklar\u0131 daha net bir \u015fekilde g\u00f6sterir.<\/p>\n<h3>4. Da\u011f\u0131l\u0131m Grafikleri (Scatter Plots): \u0130ki De\u011fi\u015fken Aras\u0131ndaki \u0130li\u015fkiyi G\u00f6stermek \u0130\u00e7in<\/h3>\n<p>Da\u011f\u0131l\u0131m grafikleri, iki say\u0131sal de\u011fi\u015fken aras\u0131ndaki ili\u015fkiyi veya korelasyonu g\u00f6stermek i\u00e7in kullan\u0131l\u0131r. Her nokta, iki de\u011fi\u015fkenin bir \u00e7iftini temsil eder. \u00d6rne\u011fin, \u00f6\u011frenci ders \u00e7al\u0131\u015fma s\u00fcresi ile s\u0131nav notu aras\u0131ndaki ili\u015fkiyi, reklam harcamalar\u0131 ile sat\u0131\u015f gelirleri aras\u0131ndaki ba\u011f\u0131 veya bir pop\u00fclasyondaki ya\u015f ile boy aras\u0131ndaki ili\u015fkiyi g\u00f6rselle\u015ftirmek i\u00e7in da\u011f\u0131l\u0131m grafikleri tercih edilir. Bir trend \u00e7izgisi eklenerek ili\u015fkinin y\u00f6n\u00fc ve g\u00fcc\u00fc daha belirgin hale getirilebilir.<\/p>\n<h3>5. Radar Grafikler (Radar Charts): \u00c7ok Boyutlu Verileri Kar\u015f\u0131la\u015ft\u0131rmak \u0130\u00e7in<\/h3>\n<p>Radar grafikler veya a\u011f grafikleri, bir veya daha fazla grubun birden fazla boyuttaki performans\u0131n\u0131 kar\u015f\u0131la\u015ft\u0131rmak i\u00e7in kullan\u0131l\u0131r. Her bir eksen bir \u00f6zelli\u011fi veya boyutu temsil eder. \u00d6rne\u011fin, farkl\u0131 \u00fcr\u00fcnlerin \u00f6zelliklerini (fiyat, kalite, tasar\u0131m, dayan\u0131kl\u0131l\u0131k) veya bir futbolcunun \u00e7e\u015fitli beceri setlerini (h\u0131z, pas, \u015fut, savunma) kar\u015f\u0131la\u015ft\u0131rmak i\u00e7in idealdir. \u00c7ok say\u0131da boyutu tek bir grafikte \u00f6zetleyebilirler, ancak \u00e7ok fazla veri serisi oldu\u011funda okunmas\u0131 zorla\u015fabilir.<\/p>\n<p>Do\u011fru grafik t\u00fcr\u00fcn\u00fc se\u00e7mek, verilerinizi anlaml\u0131 hale getirmenin ilk ad\u0131m\u0131d\u0131r. Her grafik t\u00fcr\u00fcn\u00fcn kendine \u00f6zg\u00fc avantajlar\u0131 ve dezavantajlar\u0131 oldu\u011funu unutmay\u0131n. Amac\u0131n\u0131z, verilerinizin hikayesini en net ve anla\u015f\u0131l\u0131r \u015fekilde anlatmakt\u0131r.<\/p>\n<h2>\u0130leri D\u00fczey: Dinamik Veri ve Etkile\u015fim Nas\u0131l Sa\u011flan\u0131r?<\/h2>\n<p>Statik grafikler g\u00fczeldir, ancak ger\u00e7ek d\u00fcnya uygulamalar\u0131nda genellikle dinamik veri ak\u0131\u015f\u0131na ve kullan\u0131c\u0131 etkile\u015fimine ihtiya\u00e7 duyar\u0131z. Bir dashboard'un canl\u0131 sat\u0131\u015f verilerini g\u00f6stermesi, bir hisse senedi uygulamas\u0131n\u0131n fiyat de\u011fi\u015fimlerini an\u0131nda g\u00fcncellemesi veya kullan\u0131c\u0131n\u0131n belirli bir zaman dilimini se\u00e7erek verileri filtrelemesi, ileri d\u00fczey JavaScript grafik uygulamalar\u0131n\u0131n temelini olu\u015fturur. Bu b\u00f6l\u00fcmde, dinamik verilerle \u00e7al\u0131\u015fma ve kullan\u0131c\u0131 etkile\u015fimini grafiklerinize nas\u0131l entegre edece\u011finizi ke\u015ffedece\u011fiz.<\/p>\n<h3>1. API'den Dinamik Veri \u00c7ekme ve Grafikleri G\u00fcncelleme<\/h3>\n<p>Ger\u00e7ek zamanl\u0131 veya g\u00fcncel verileri g\u00f6rselle\u015ftirmek i\u00e7in genellikle bir API'den veri \u00e7ekmemiz gerekir. JavaScript'in <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/Fetch_API\" target=\"_blank\">Fetch API<\/a>'si, bu i\u015flem i\u00e7in modern ve g\u00fc\u00e7l\u00fc bir y\u00f6ntem sunar. \u00d6rne\u011fin, bir sunucudan JSON format\u0131nda veri \u00e7ekip Chart.js grafi\u011fimizi g\u00fcncelleyebiliriz:<\/p>\n<pre><code class=\"language-javascript\">async function fetchSalesData() {\n    try {\n        const response = await fetch('https:\/\/api.example.com\/sales-data'); \/\/ \u00d6rnek API adresi\n        if (!response.ok) {\n            throw new Error(<code>HTTP hata kodu: ${response.status}<\/code>);\n        }\n        const apiData = await response.json();\n\n        \/\/ API'den gelen verileri Chart.js format\u0131na d\u00f6n\u00fc\u015ft\u00fcr\n        const labels = apiData.map(item => item.month); \/\/ Veri \u00f6rne\u011fi: [{ month: 'Ocak', sales: 1500 }, ...]\n        const sales = apiData.map(item => item.sales);\n\n        \/\/ Mevcut grafik \u00f6rne\u011fini bulun veya yeni bir tane olu\u015fturun\n        const ctx = document.getElementById('myDynamicChart').getContext('2d');\n        let myChart = Chart.getChart('myDynamicChart'); \/\/ Var olan grafi\u011fi bulmaya \u00e7al\u0131\u015f\n\n        if (myChart) {\n            \/\/ Grafik zaten varsa, verilerini g\u00fcncelle\n            myChart.data.labels = labels;\n            myChart.data.datasets[0].data = sales;\n            myChart.update(); \/\/ Grafi\u011fi yeniden \u00e7iz\n        } else {\n            \/\/ Grafik yoksa, yeni bir tane olu\u015ftur\n            myChart = new Chart(ctx, {\n                type: 'line', \/\/ Veya 'bar'\n                data: {\n                    labels: labels,\n                    datasets: [{\n                        label: 'Dinamik Sat\u0131\u015flar',\n                        data: sales,\n                        borderColor: 'rgba(75, 192, 192, 1)',\n                        backgroundColor: 'rgba(75, 192, 192, 0.2)',\n                        fill: true\n                    }]\n                },\n                options: {\n                    responsive: true,\n                    \/\/ ... di\u011fer se\u00e7enekler ...\n                }\n            });\n        }\n    } catch (error) {\n        console.error('Veri \u00e7ekme veya grafik g\u00fcncelleme hatas\u0131:', error);\n    }\n}\n\n\/\/ Sayfa y\u00fcklendi\u011finde veya belirli aral\u0131klarla veriyi \u00e7ekin\ndocument.addEventListener('DOMContentLoaded', fetchSalesData);\n\/\/ setInterval(fetchSalesData, 60000); \/\/ Her 60 saniyede bir g\u00fcncelle\n<\/pre>\n<p><\/code><\/p>\n<p>Bu \u00f6rnekte, bir API'den veri \u00e7ektik, bu veriyi Chart.js'in bekledi\u011fi formata d\u00f6n\u00fc\u015ft\u00fcrd\u00fck ve ard\u0131ndan mevcut bir grafi\u011fi <code class=\"language-javascript\">myChart.update()<\/code> metoduyla g\u00fcncelledik. E\u011fer grafik daha \u00f6nce olu\u015fturulmam\u0131\u015fsa, yeni bir Chart \u00f6rne\u011fi olu\u015fturulur. Bu yakla\u015f\u0131m, canl\u0131 veri ak\u0131\u015f\u0131 olan uygulamalar i\u00e7in hayati \u00f6neme sahiptir.<\/p>\n<h3>2. Kullan\u0131c\u0131 Etkile\u015fimleri ve Filtreleme<\/h3>\n<p>Grafiklerinizi daha etkile\u015fimli hale getirmenin bir yolu, kullan\u0131c\u0131lar\u0131n verilerle do\u011frudan etkile\u015fim kurmas\u0131n\u0131 sa\u011flamakt\u0131r. Bu, \u00f6rne\u011fin bir zaman aral\u0131\u011f\u0131 se\u00e7ici, bir kategori filtresi veya bir veri noktas\u0131n\u0131n \u00fczerine gelindi\u011finde ayr\u0131nt\u0131 g\u00f6steren ara\u00e7 ipu\u00e7lar\u0131 (<code class=\"language-javascript\">tooltip<\/code>) ile yap\u0131labilir.<\/p>\n<p>Chart.js, <code class=\"language-javascript\">options<\/code> i\u00e7inde bir\u00e7ok etkile\u015fim \u00f6zelli\u011fi sunar. \u00d6rne\u011fin, ara\u00e7 ipu\u00e7lar\u0131n\u0131 ve \u00fczerlerine gelindi\u011finde (hover) davran\u0131\u015flar\u0131 \u00f6zelle\u015ftirebilirsiniz. Daha karma\u015f\u0131k etkile\u015fimler i\u00e7in, HTML form elemanlar\u0131 (d\u00fc\u015fen men\u00fcler, tarih se\u00e7iciler) kullanarak kullan\u0131c\u0131lardan giri\u015f alabilir ve bu giri\u015fe g\u00f6re grafi\u011fin verilerini veya ayarlar\u0131n\u0131 de\u011fi\u015ftirebilirsiniz.<\/p>\n<pre><code class=\"language-javascript\">\/\/ \u00d6rnek: Y\u0131l se\u00e7imine g\u00f6re grafi\u011fi g\u00fcncelleme\nconst yearSelector = document.getElementById('yearSelect');\nyearSelector.addEventListener('change', async function() {\n    const selectedYear = this.value;\n    \/\/ API'den se\u00e7ilen y\u0131la g\u00f6re veri \u00e7ekme\n    const response = await fetch(<code>https:\/\/api.example.com\/sales-data?year=${selectedYear}<\/code>);\n    const apiData = await response.json();\n\n    \/\/ Verileri g\u00fcncelle ve grafi\u011fi yeniden \u00e7iz\n    myChart.data.labels = apiData.map(item => item.month);\n    myChart.data.datasets[0].data = apiData.map(item => item.sales);\n    myChart.update();\n});\n<\/pre>\n<p><\/code><\/p>\n<h3>3. Kapsaml\u0131 \u00d6zelle\u015ftirme ve Performans: D3.js ve Plotly.js<\/h3>\n<p>Chart.js \u00e7o\u011fu temel ve orta d\u00fczey grafik ihtiyac\u0131n\u0131 kar\u015f\u0131larken, baz\u0131 projeler benzersiz \u00f6zelle\u015ftirme yetenekleri veya \u00e7ok y\u00fcksek performans gerektirebilir. Bu durumlarda, <strong>D3.js<\/strong> veya <strong>Plotly.js<\/strong> gibi k\u00fct\u00fcphaneler devreye girer.<\/p>\n<ul>\n<li>\n<div class=\"expert-tip\">Uzman \u0130pucu: D3.js, \u00f6\u011frenme e\u011frisi y\u00fcksek olsa da, web standartlar\u0131na (SVG, Canvas, HTML) tam eri\u015fim sa\u011flayarak neredeyse hayal edebilece\u011finiz her t\u00fcrl\u00fc g\u00f6rselle\u015ftirmeyi olu\u015fturman\u0131za olanak tan\u0131r. Verilerle DOM \u00f6\u011feleri aras\u0131nda do\u011frudan bir ba\u011f kurar ve son derece \u00f6zelle\u015ftirilebilir. E\u011fer veri g\u00f6rselle\u015ftirme sizin i\u00e7in bir sanat bi\u00e7imi ise ve s\u0131f\u0131rdan her detay\u0131 kontrol etmek istiyorsan\u0131z, D3.js'i ke\u015ffetmelisiniz.<\/div>\n<\/li>\n<li>\n            <strong>Plotly.js<\/strong>: Bilimsel ve analitik g\u00f6rselle\u015ftirmeler i\u00e7in tasarlanm\u0131\u015ft\u0131r. 2D, 3D ve istatistiksel grafikler dahil olmak \u00fczere geni\u015f bir grafik yelpazesi sunar. Etkile\u015fim \u00f6zellikleri (yak\u0131nla\u015ft\u0131rma, kayd\u0131rma, veri noktas\u0131 bilgisi) yerle\u015fik olarak gelir ve b\u00fcy\u00fck veri setleriyle iyi performans g\u00f6sterir. Python ve R gibi dillerle de entegre \u00e7al\u0131\u015fabilir, bu da veri bilimcileri aras\u0131nda pop\u00fclerli\u011fini art\u0131r\u0131r. E\u011fer karma\u015f\u0131k bilimsel verileri veya 3D modelleri g\u00f6rselle\u015ftirmeniz gerekiyorsa, Plotly.js g\u00fc\u00e7l\u00fc bir se\u00e7enektir.<\/li>\n<\/ul>\n<p>Bu ileri d\u00fczey teknikler ve k\u00fct\u00fcphaneler, JavaScript ile grafik olu\u015fturma yeteneklerinizi bir sonraki seviyeye ta\u015f\u0131yarak, sadece g\u00f6rsel de\u011fil, ayn\u0131 zamanda i\u015flevsel ve etkile\u015fimli veri g\u00f6rselle\u015ftirme \u00e7\u00f6z\u00fcmleri geli\u015ftirmenize olanak tan\u0131r.<\/p>\n<h2>Mobil Uyumlu Grafikler: Her Cihazda Harika G\u00f6r\u00fcn\u00fcm Nas\u0131l Elde Edilir?<\/h2>\n<p>G\u00fcn\u00fcm\u00fcz internet trafi\u011finin b\u00fcy\u00fck bir k\u0131sm\u0131 mobil cihazlar \u00fczerinden ger\u00e7ekle\u015fti\u011finden, web sitelerinizin ve dolay\u0131s\u0131yla grafiklerinizin mobil uyumlu (responsive) olmas\u0131 art\u0131k bir zorunluluktur. Mobil uyumlu grafikler, ekran boyutu ne olursa olsun okunabilir, eri\u015filebilir ve kullan\u0131\u015fl\u0131 olmal\u0131d\u0131r. JavaScript ile grafik olu\u015ftururken, bu uyumlulu\u011fu sa\u011flamak i\u00e7in atabilece\u011finiz birka\u00e7 \u00f6nemli ad\u0131m vard\u0131r.<\/p>\n<h3>1. Viewport Meta Etiketi: Temel Ad\u0131m<\/h3>\n<p>Her responsive web sayfas\u0131nda oldu\u011fu gibi, mobil uyumlu grafikler i\u00e7in de HTML dosyan\u0131z\u0131n <code><head><\/code> b\u00f6l\u00fcm\u00fcne viewport meta etiketini eklemek zorunludur. Bu etiket, taray\u0131c\u0131lara sayfan\u0131n cihaz\u0131n geni\u015fli\u011fine g\u00f6re \u00f6l\u00e7eklenmesi gerekti\u011fini bildirir:<\/p>\n<pre><code class=\"language-html\"><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<\/pre>\n<p><\/code><\/p>\n<p>Bu etiket olmadan, mobil taray\u0131c\u0131lar sayfan\u0131z\u0131 masa\u00fcst\u00fc g\u00f6r\u00fcn\u00fcm\u00fcnde render edebilir ve ard\u0131ndan k\u00fc\u00e7\u00fcltebilir, bu da grafiklerinizin okunaks\u0131z hale gelmesine neden olur.<\/p>\n<h3>2. Esnek Kapsay\u0131c\u0131lar ve Responsive K\u00fct\u00fcphaneler<\/h3>\n<p>JavaScript grafik k\u00fct\u00fcphanelerinin \u00e7o\u011fu, \u00f6zellikle Chart.js gibi pop\u00fcler olanlar, responsive tasar\u0131m i\u00e7in yerle\u015fik destek sunar. Grafi\u011finizi bar\u0131nd\u0131ran <code><canvas><\/code> veya <code><svg><\/code> elementini esnek bir kapsay\u0131c\u0131 (genellikle bir <code><\/p>\n<div><\/code>) i\u00e7ine yerle\u015ftirmek ve bu kapsay\u0131c\u0131ya y\u00fczdesel geni\u015flikler vermek, grafi\u011fin ekran boyutuna g\u00f6re otomatik olarak boyutlanmas\u0131n\u0131 sa\u011flar.<\/p>\n<p>Chart.js \u00f6rne\u011fimizde, <code class=\"language-javascript\">options<\/code> i\u00e7inde <code class=\"language-javascript\">responsive: true<\/code> ve <code class=\"language-javascript\">maintainAspectRatio: false<\/code> ayarlar\u0131n\u0131 kullanarak grafi\u011fin kapsay\u0131c\u0131ya g\u00f6re boyutlanmas\u0131n\u0131 sa\u011flayabiliriz:<\/p>\n<pre><code class=\"language-javascript\">const config = {\n    type: 'bar',\n    data: data,\n    options: {\n        responsive: true, \/\/ Kapsay\u0131c\u0131ya g\u00f6re otomatik boyutlanma\n        maintainAspectRatio: false, \/\/ En boy oran\u0131n\u0131 korumaz, kapsay\u0131c\u0131ya tamamen uyar\n        plugins: {\n            \/\/ ...\n        },\n        scales: {\n            \/\/ ...\n        }\n    }\n};\n<\/pre>\n<p><\/code><\/p>\n<p>Ayr\u0131ca, grafi\u011finizin kapsay\u0131c\u0131s\u0131n\u0131 stilize ederken <code class=\"language-css\">max-width<\/code> \u00f6zelli\u011fini kullanmak, b\u00fcy\u00fck ekranlarda grafi\u011fin \u00e7ok fazla b\u00fcy\u00fcmesini engellerken, k\u00fc\u00e7\u00fck ekranlarda esnek kalmas\u0131n\u0131 sa\u011flar:<\/p>\n<pre><code class=\"language-css\">\/* styles.css *\/\n.chart-container {\n    width: 90%; \/* Kapsay\u0131c\u0131n\u0131n %90 geni\u015flikte olmas\u0131n\u0131 sa\u011flar *\/\n    max-width: 900px; \/* Maksimum 900px geni\u015fli\u011fe ula\u015f\u0131r *\/\n    margin: auto; \/* Ortalamak i\u00e7in *\/\n    height: 400px; \/* Belirli bir y\u00fckseklik ayarlayabilirsiniz *\/\n}\n<\/pre>\n<p><\/code><\/p>\n<pre><code class=\"language-html\"><\/pre>\n<p><\/code><\/p>\n<div class=\"chart-container\">\n    <canvas id=\"myResponsiveChart\"><\/canvas>\n<\/div>\n<p><\/code><\/p>\n<h3>3. CSS Media Queries ile \u00d6zelle\u015ftirme<\/h3>\n<p>Baz\u0131 durumlarda, grafi\u011fin mobil ve masa\u00fcst\u00fc g\u00f6r\u00fcn\u00fcmleri aras\u0131nda \u00f6nemli farkl\u0131l\u0131klar g\u00f6stermesini isteyebilirsiniz. \u00d6rne\u011fin, mobil cihazlarda legend'i gizlemek, yaz\u0131 tipi boyutlar\u0131n\u0131 k\u00fc\u00e7\u00fcltmek veya eksen etiketlerini d\u00f6nd\u00fcrmek gibi. Bu t\u00fcr durumsal stil ayarlamalar\u0131 i\u00e7in CSS Media Queries kullanabilirsiniz.<\/p>\n<pre><code class=\"language-css\">\/* styles.css *\/\n\/* Varsay\u0131lan stil (masa\u00fcst\u00fc i\u00e7in) *\/\n.chart-title {\n    font-size: 24px;\n    text-align: center;\n}\n.chart-legend {\n    display: block; \/* Legend'i g\u00f6ster *\/\n}\n\n\/* K\u00fc\u00e7\u00fck ekranlar (mobil cihazlar) i\u00e7in stil *\/\n@media (max-width: 768px) {\n    .chart-container {\n        height: 300px; \/* Mobilde daha az y\u00fckseklik *\/\n        width: 95%;\n    }\n    .chart-title {\n        font-size: 18px; \/* Ba\u015fl\u0131k boyutunu k\u00fc\u00e7\u00fclt *\/\n    }\n    \/* Chart.js opsiyonlar\u0131nda da benzer de\u011fi\u015fiklikler yapman\u0131z gerekebilir *\/\n    \/* \u00d6rne\u011fin, legend'i mobil cihazlarda gizlemek i\u00e7in Chart.js yap\u0131land\u0131rmas\u0131n\u0131 JavaScript ile de\u011fi\u015ftirebilirsiniz *\/\n}\n<\/pre>\n<p><\/code><\/p>\n<p>Do\u011frudan CSS ile Chart.js grafik \u00f6\u011felerini kontrol etmek zor oldu\u011fundan, \u00e7o\u011fu zaman media query mant\u0131\u011f\u0131n\u0131 JavaScript kodunuza ta\u015f\u0131yarak Chart.js se\u00e7eneklerini dinamik olarak ayarlaman\u0131z gerekebilir:<\/p>\n<pre><code class=\"language-javascript\">function getChartOptions() {\n    const isMobile = window.innerWidth <= 768; \/\/ Mobil cihaz kontrol\u00fc\n    return {\n        responsive: true,\n        maintainAspectRatio: false,\n        plugins: {\n            legend: {\n                display: !isMobile, \/\/ Mobilde legend'i gizle\n                position: 'bottom'\n            },\n            title: {\n                display: true,\n                text: 'Sat\u0131\u015f Verileri',\n                font: {\n                    size: isMobile ? 16 : 24\n                }\n            }\n        },\n        scales: {\n            x: {\n                ticks: {\n                    maxRotation: isMobile ? 90 : 0, \/\/ Mobilde etiketleri d\u00f6nd\u00fcr\n                    minRotation: isMobile ? 90 : 0\n                }\n            }\n        }\n    };\n}\n\n\/\/ Grafi\u011fi olu\u015ftururken bu se\u00e7enekleri kullan\u0131n\n\/\/ new Chart(ctx, { type: 'bar', data: data, options: getChartOptions() });\n\n\/\/ Ekran boyutu de\u011fi\u015fti\u011finde grafi\u011fi g\u00fcncellemek i\u00e7in\nwindow.addEventListener('resize', function() {\n    const myChart = Chart.getChart('myResponsiveChart');\n    if (myChart) {\n        myChart.options = getChartOptions();\n        myChart.update();\n    }\n});\n<\/pre>\n<p><\/code><\/p>\n<p>Bu y\u00f6ntemle, JavaScript kullanarak cihaz boyutuna g\u00f6re grafi\u011finizin g\u00f6r\u00fcn\u00fcm\u00fcn\u00fc ve davran\u0131\u015f\u0131n\u0131 tamamen \u00f6zelle\u015ftirebilirsiniz. Unutmay\u0131n, mobil uyumlu grafikler sadece k\u00fc\u00e7\u00fclm\u00fc\u015f grafikler de\u011fildir; mobil kullan\u0131c\u0131 deneyimini optimize edecek \u015fekilde tasarlanm\u0131\u015f grafiklerdir.<\/p>\n<div class=\"expert-tip\">Uzman \u0130pucu: \u00c7ok fazla veri noktas\u0131 olan \u00e7izgi grafikler mobil ekranlarda karma\u015f\u0131k g\u00f6r\u00fcnebilir. Bu durumlarda, mobil g\u00f6r\u00fcn\u00fcm i\u00e7in sadece en \u00f6nemli veri noktalar\u0131n\u0131 g\u00f6steren basitle\u015ftirilmi\u015f bir grafi\u011fi veya farkl\u0131 bir grafik t\u00fcr\u00fcn\u00fc (\u00f6rne\u011fin, \u00f6zet bir \u00e7ubuk grafik) de\u011ferlendirebilirsiniz.<\/div>\n<h2>Vaka Analizi: E-ticaret Panosu \u0130\u00e7in Performans Grafikleri<\/h2>\n<p>Bir e-ticaret y\u00f6neticisinin, platformunun performans\u0131n\u0131 anl\u0131k olarak izleyebilece\u011fi bir dashboard'a ihtiyac\u0131 oldu\u011funu varsayal\u0131m. Bu dashboard, sat\u0131\u015flar, \u00fcr\u00fcn pop\u00fclaritesi, m\u00fc\u015fteri etkile\u015fimleri ve sipari\u015f durumlar\u0131 gibi kritik performans g\u00f6stergelerini (KPI) g\u00f6rselle\u015ftirmeli. JavaScript ile grafik olu\u015fturma yeteneklerimizi kullanarak b\u00f6yle bir panoyu nas\u0131l tasarlayabiliriz?<\/p>\n<h3>Senaryo ve \u0130htiya\u00e7lar:<\/h3>\n<ul>\n<li><strong>Ayl\u0131k Sat\u0131\u015f Trendleri:<\/strong> Y\u00f6neticinin, y\u0131l baz\u0131nda ayl\u0131k sat\u0131\u015f art\u0131\u015flar\u0131n\u0131 veya d\u00fc\u015f\u00fc\u015flerini g\u00f6rmesi gerekiyor.<\/li>\n<li><strong>En \u00c7ok Satan \u00dcr\u00fcnler:<\/strong> Hangi \u00fcr\u00fcn kategorilerinin veya \u00fcr\u00fcnlerin en \u00e7ok gelir getirdi\u011fini anlamas\u0131 \u00f6nemli.<\/li>\n<li><strong>Sipari\u015f Durumlar\u0131 Da\u011f\u0131l\u0131m\u0131:<\/strong> Bekleyen, g\u00f6nderilen, teslim edilen ve iptal edilen sipari\u015flerin oranlar\u0131n\u0131 bilmesi gerekiyor.<\/li>\n<li><strong>Yeni M\u00fc\u015fteri Edinimi:<\/strong> Yeni m\u00fc\u015fterilerin zaman i\u00e7indeki art\u0131\u015f\u0131n\u0131 izlemesi gerekiyor.<\/li>\n<\/ul>\n<h3>Grafik Se\u00e7imleri ve Uygulama Yakla\u015f\u0131m\u0131 (Chart.js ile):<\/h3>\n<h4>1. Ayl\u0131k Sat\u0131\u015f Trendleri: \u00c7izgi Grafik<\/h4>\n<p>Zamana ba\u011fl\u0131 verileri g\u00f6rselle\u015ftirmek i\u00e7in en uygun olan \u00e7izgi grafiktir. Y\u00f6neticinin sat\u0131\u015flardaki y\u00fckseli\u015f ve d\u00fc\u015f\u00fc\u015fleri bir bak\u0131\u015fta g\u00f6rmesini sa\u011flar.<\/p>\n<pre><code class=\"language-javascript\">\/\/ JavaScript (app.js)\nconst salesCtx = document.getElementById('monthlySalesChart').getContext('2d');\nconst monthlySalesChart = new Chart(salesCtx, {\n    type: 'line',\n    data: {\n        labels: ['Ocak', '\u015eubat', 'Mart', 'Nisan', 'May\u0131s', 'Haziran', 'Temmuz', 'A\u011fustos', 'Eyl\u00fcl', 'Ekim', 'Kas\u0131m', 'Aral\u0131k'],\n        datasets: [{\n            label: '2023 Y\u0131l\u0131 Sat\u0131\u015flar\u0131',\n            data: [12000, 15000, 14000, 18000, 22000, 20000, 25000, 28000, 27000, 30000, 35000, 40000],\n            borderColor: 'rgb(75, 192, 192)',\n            tension: 0.3,\n            fill: true,\n            backgroundColor: 'rgba(75, 192, 192, 0.2)'\n        }]\n    },\n    options: {\n        responsive: true,\n        maintainAspectRatio: false,\n        plugins: {\n            title: { display: true, text: 'Ayl\u0131k Sat\u0131\u015f Trendleri' },\n            legend: { display: true, position: 'bottom' }\n        },\n        scales: {\n            y: { beginAtZero: true, title: { display: true, text: 'Toplam Sat\u0131\u015f (\u20ba)' } },\n            x: { title: { display: true, text: 'Ay' } }\n        }\n    }\n});\n<\/pre>\n<p><\/code><\/p>\n<pre><code class=\"language-html\"><\/pre>\n<p><\/code><\/p>\n<div class=\"chart-container\">\n    <canvas id=\"monthlySalesChart\"><\/canvas>\n<\/div>\n<p><\/code><\/p>\n<h4>2. En \u00c7ok Satan \u00dcr\u00fcnler: Yatay \u00c7ubuk Grafik<\/h4>\n<p>Farkl\u0131 \u00fcr\u00fcnleri veya kategorileri kar\u015f\u0131la\u015ft\u0131rmak i\u00e7in \u00e7ubuk grafik idealdir. Yatay \u00e7ubuk grafik, uzun \u00fcr\u00fcn adlar\u0131 oldu\u011funda daha iyi okunabilirlik sa\u011flar.<\/p>\n<pre><code class=\"language-javascript\">\/\/ JavaScript (app.js)\nconst productsCtx = document.getElementById('topProductsChart').getContext('2d');\nconst topProductsChart = new Chart(productsCtx, {\n    type: 'bar', \/\/ Yatay \u00e7ubuklar i\u00e7in 'bar' kullan\u0131l\u0131r, eksenler de\u011fi\u015ftirilir\n    data: {\n        labels: ['Ak\u0131ll\u0131 Telefon', 'Diz\u00fcst\u00fc Bilgisayar', 'Kablosuz Kulakl\u0131k', 'Ak\u0131ll\u0131 Saat', 'Kamera'],\n        datasets: [{\n            label: 'Sat\u0131\u015f Geliri (\u20ba)',\n            data: [75000, 60000, 35000, 28000, 20000],\n            backgroundColor: ['rgba(255, 99, 132, 0.6)', 'rgba(54, 162, 235, 0.6)', 'rgba(255, 206, 86, 0.6)', 'rgba(75, 192, 192, 0.6)', 'rgba(153, 102, 255, 0.6)'],\n            borderColor: ['rgba(255, 99, 132, 1)', 'rgba(54, 162, 235, 1)', 'rgba(255, 206, 86, 1)', 'rgba(75, 192, 192, 1)', 'rgba(153, 102, 255, 1)'],\n            borderWidth: 1\n        }]\n    },\n    options: {\n        indexAxis: 'y', \/\/ \u00c7ubuklar\u0131 yatay yapmak i\u00e7in\n        responsive: true,\n        maintainAspectRatio: false,\n        plugins: {\n            title: { display: true, text: 'En \u00c7ok Satan \u00dcr\u00fcn Kategorileri' }\n        },\n        scales: {\n            x: { beginAtZero: true, title: { display: true, text: 'Gelir (\u20ba)' } },\n            y: { title: { display: true, text: 'Kategori' } }\n        }\n    }\n});\n<\/pre>\n<p><\/code><\/p>\n<pre><code class=\"language-html\"><\/pre>\n<p><\/code><\/p>\n<div class=\"chart-container\">\n    <canvas id=\"topProductsChart\"><\/canvas>\n<\/div>\n<p><\/code><\/p>\n<h4>3. Sipari\u015f Durumlar\u0131 Da\u011f\u0131l\u0131m\u0131: Pasta Grafik<\/h4>\n<p>Toplam sipari\u015flerin farkl\u0131 durumlara g\u00f6re oranlar\u0131n\u0131 g\u00f6stermek i\u00e7in pasta grafik kullan\u0131l\u0131r. Bu, y\u00f6neticinin genel sipari\u015f ak\u0131\u015f\u0131n\u0131n sa\u011fl\u0131\u011f\u0131n\u0131 anlamas\u0131na yard\u0131mc\u0131 olur.<\/p>\n<pre><code class=\"language-javascript\">\/\/ JavaScript (app.js)\nconst orderStatusCtx = document.getElementById('orderStatusChart').getContext('2d');\nconst orderStatusChart = new Chart(orderStatusCtx, {\n    type: 'pie',\n    data: {\n        labels: ['Beklemede', 'Haz\u0131rlan\u0131yor', 'Kargoya Verildi', 'Teslim Edildi', '\u0130ptal Edildi'],\n        datasets: [{\n            data: [150, 300, 200, 1200, 50],\n            backgroundColor: ['#FFC107', '#2196F3', '#00BCD4', '#4CAF50', '#F44336'],\n            hoverOffset: 4\n        }]\n    },\n    options: {\n        responsive: true,\n        maintainAspectRatio: false,\n        plugins: {\n            title: { display: true, text: 'G\u00fcncel Sipari\u015f Durumlar\u0131' }\n        }\n    }\n});\n<\/pre>\n<p><\/code><\/p>\n<pre><code class=\"language-html\"><\/pre>\n<p><\/code><\/p>\n<div class=\"chart-container small-chart\"> <!-- Daha k\u00fc\u00e7\u00fck bir konteyner i\u00e7in farkl\u0131 stil uygulanabilir --><br \/>\n    <canvas id=\"orderStatusChart\"><\/canvas>\n<\/div>\n<p><\/code><\/p>\n<p>Bu vaka analizinde, farkl\u0131 veri t\u00fcrleri i\u00e7in en uygun grafik t\u00fcrlerini se\u00e7tik ve Chart.js kullanarak basit ama etkili g\u00f6rselle\u015ftirmeler olu\u015fturduk. Bu grafikler, bir e-ticaret y\u00f6neticisinin i\u015f kararlar\u0131n\u0131 desteklemek i\u00e7in ihtiya\u00e7 duydu\u011fu temel bilgileri h\u0131zl\u0131 ve anla\u015f\u0131l\u0131r bir \u015fekilde sunar. Ayr\u0131ca, bu grafikleri ger\u00e7ek bir API'den dinamik veri \u00e7ekerek ve kullan\u0131c\u0131 etkile\u015fimleriyle (\u00f6rne\u011fin, zaman filtresi ekleyerek) daha da geli\u015ftirmek m\u00fcmk\u00fcnd\u00fcr.<\/p>\n<h2>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular<\/h2>\n<p>JavaScript, modern web uygulamalar\u0131nda veri g\u00f6rselle\u015ftirme i\u00e7in inan\u0131lmaz derecede g\u00fc\u00e7l\u00fc ve esnek bir ara\u00e7 sunar. Bu makalede, veri g\u00f6rselle\u015ftirmenin temel \u00f6neminden ba\u015flayarak, Chart.js gibi pop\u00fcler k\u00fct\u00fcphanelerle nas\u0131l basit grafikler olu\u015fturulaca\u011f\u0131n\u0131 \u00f6\u011frendik. \u00c7izgi, \u00e7ubuk, pasta ve da\u011f\u0131l\u0131m grafikleri gibi farkl\u0131 t\u00fcrlerin hangi senaryolarda kullan\u0131laca\u011f\u0131n\u0131 ke\u015ffettik. Ayr\u0131ca, API'lerden dinamik veri \u00e7ekme ve kullan\u0131c\u0131 etkile\u015fimleriyle grafiklerimizi daha i\u015flevsel hale getirme konular\u0131na de\u011findik. Mobil uyumlu grafikler olu\u015fturman\u0131n \u00f6nemini ve medya sorgular\u0131 ile JavaScript yakla\u015f\u0131mlar\u0131n\u0131 inceledik, son olarak da bir e-ticaret panosu i\u00e7in ger\u00e7ek d\u00fcnya vaka analizi ile \u00f6\u011frendiklerimizi peki\u015ftirdik.<\/p>\n<p>JavaScript'in a\u00e7\u0131k kaynakl\u0131 ekosistemi, s\u00fcrekli geli\u015fen k\u00fct\u00fcphaneleri ve topluluk deste\u011fi sayesinde, veri g\u00f6rselle\u015ftirme yetenekleriniz s\u0131n\u0131r tan\u0131m\u0131yor. \u0130ster basit bir rapor, ister karma\u015f\u0131k bir analitik dashboard geli\u015ftiriyor olun, JavaScript size arad\u0131\u011f\u0131n\u0131z g\u00fcc\u00fc ve esnekli\u011fi sunacakt\u0131r. Verilerinizin hikayesini anlatmaya bug\u00fcn ba\u015flay\u0131n!<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<dl>\n<dt>JavaScript'te grafik olu\u015fturmak i\u00e7in hangi k\u00fct\u00fcphaneyi se\u00e7meliyim?<\/dt>\n<dd>\n<p>Se\u00e7im, projenizin karma\u015f\u0131kl\u0131\u011f\u0131na ve \u00f6zelle\u015ftirme ihtiya\u00e7lar\u0131n\u0131za ba\u011fl\u0131d\u0131r:<\/p>\n<ul>\n<li><strong>Chart.js:<\/strong> Ba\u015flang\u0131\u00e7 i\u00e7in harika, kullan\u0131m\u0131 kolay, responsive ve temel grafik t\u00fcrleri i\u00e7in idealdir.<\/li>\n<li><strong>D3.js:<\/strong> Y\u00fcksek \u00f6zelle\u015ftirilebilirlik ve kontrol gerektiren, benzersiz ve karma\u015f\u0131k g\u00f6rselle\u015ftirmeler i\u00e7in uygundur. \u00d6\u011frenme e\u011frisi daha y\u00fcksektir.<\/li>\n<li><strong>Plotly.js:<\/strong> Bilimsel, istatistiksel ve 3D grafikler i\u00e7in g\u00fc\u00e7l\u00fc, interaktif \u00f6zellikler sunar.<\/li>\n<\/ul>\n<\/dd>\n<dt>Grafik k\u00fct\u00fcphanesini indirmeden kullanabilir miyim?<\/dt>\n<dd>\n<p>Evet, bir\u00e7ok pop\u00fcler JavaScript grafik k\u00fct\u00fcphanesi (Chart.js gibi) CDN (Content Delivery Network) \u00fczerinden do\u011frudan kullan\u0131labilir. Bu, k\u00fct\u00fcphaneyi projenize kolayca dahil etmenizi sa\u011flar ve kendi sunucunuzda bar\u0131nd\u0131rma gereksinimini ortadan kald\u0131r\u0131r. Makaledeki \u00f6rne\u011fimizde Chart.js i\u00e7in CDN kulland\u0131k.<\/p>\n<\/dd>\n<dt>JavaScript grafikleri mobil cihazlarda nas\u0131l responsive hale getirilir?<\/dt>\n<dd>\n<p>Mobil uyumluluk i\u00e7in \u015fu ad\u0131mlar\u0131 izleyin:<\/p>\n<ol>\n<li>HTML <code class=\"language-html\"><head><\/code> k\u0131sm\u0131na <code class=\"language-html\"><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><\/code> ekleyin.<\/li>\n<li>Grafi\u011finizi bir kapsay\u0131c\u0131 <code class=\"language-html\">\n<div><\/code> i\u00e7ine al\u0131n ve bu kapsay\u0131c\u0131ya y\u00fczdesel geni\u015flik (<code class=\"language-css\">width: 100%<\/code>) ve <code class=\"language-css\">max-width<\/code> tan\u0131mlay\u0131n.<\/li>\n<li>Kulland\u0131\u011f\u0131n\u0131z k\u00fct\u00fcphanenin responsive ayarlar\u0131n\u0131 (<code class=\"language-javascript\">Chart.js<\/code> i\u00e7in <code class=\"language-javascript\">responsive: true<\/code> ve <code class=\"language-javascript\">maintainAspectRatio: false<\/code>) etkinle\u015ftirin.<\/li>\n<li>Gerekirse, CSS medya sorgular\u0131 veya JavaScript ile ekran boyutuna g\u00f6re grafik se\u00e7eneklerini dinamik olarak de\u011fi\u015ftirin (\u00f6rne\u011fin, legend konumunu, yaz\u0131 tipi boyutlar\u0131n\u0131).<\/li>\n<\/ol>\n<\/dd>\n<dt>Grafiklerime dinamik veri nas\u0131l entegre edebilirim?<\/dt>\n<dd>\n<p>Dinamik veri entegrasyonu i\u00e7in genellikle a\u015fa\u011f\u0131daki ad\u0131mlar izlenir:<\/p>\n<ol>\n<li>JavaScript Fetch API veya XMLHttpRequest kullanarak bir sunucu API'sinden veri \u00e7ekin.<\/li>\n<li>\u00c7ekti\u011finiz veriyi, se\u00e7ti\u011finiz grafik k\u00fct\u00fcphanesinin bekledi\u011fi formata d\u00f6n\u00fc\u015ft\u00fcr\u00fcn.<\/li>\n<li>Mevcut grafik \u00f6rne\u011finizin <code class=\"language-javascript\">data<\/code> \u00f6zelli\u011fini g\u00fcncelleyin.<\/li>\n<li>Grafi\u011fi yeniden \u00e7izmek i\u00e7in <code class=\"language-javascript\">chartInstance.update()<\/code> (Chart.js i\u00e7in) gibi bir metod \u00e7a\u011f\u0131r\u0131n.<\/li>\n<\/ol>\n<p>Bu s\u00fcre\u00e7, dashboard'lar veya ger\u00e7ek zamanl\u0131 veri izleme uygulamalar\u0131 i\u00e7in kritik \u00f6neme sahiptir.<\/p>\n<\/dd>\n<\/dl>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"JavaScript kullanarak web sitenizde dinamik ve etkile\u015fimli veri g\u00f6rselle\u015ftirmeleri olu\u015fturmak m\u0131 istiyorsunuz? Bu kapsaml\u0131 rehber, basit bir \u00e7ubuk&hellip;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[129],"tags":[],"class_list":{"0":"post-33490","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-javascript","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>JavaScript ile Etkile\u015fimli Grafikler Olu\u015fturma Rehberi<\/title>\n<meta name=\"description\" content=\"JavaScript kullanarak web sitenizde dinamik ve etkile\u015fimli veri g\u00f6rselle\u015ftirmeleri olu\u015fturmak m\u0131 istiyorsunuz? Bu kapsaml\u0131 rehber, basit bir \u00e7ubuk grafikten karma\u015f\u0131k dashboard&#039;lara kadar her \u015feyi ad\u0131m ad\u0131m ele alarak, veri g\u00f6rselle\u015ftirme yolculu\u011funuzda size rehberlik edecek. Temel kavramlardan ba\u015flay\u0131p ileri d\u00fczey tekniklere ve mobil uyumlulu\u011fa kadar, JavaScript&#039;in grafik yeteneklerini ke\u015ffedin.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/javascript-ile-etkilesimli-grafikler-olusturma-rehberi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"JavaScript ile Etkile\u015fimli Grafikler Olu\u015fturma Rehberi\" \/>\n<meta property=\"og:description\" content=\"JavaScript kullanarak web sitenizde dinamik ve etkile\u015fimli veri g\u00f6rselle\u015ftirmeleri olu\u015fturmak m\u0131 istiyorsunuz? Bu kapsaml\u0131 rehber, basit bir \u00e7ubuk grafikten karma\u015f\u0131k dashboard&#039;lara kadar her \u015feyi ad\u0131m ad\u0131m ele alarak, veri g\u00f6rselle\u015ftirme yolculu\u011funuzda size rehberlik edecek. Temel kavramlardan ba\u015flay\u0131p ileri d\u00fczey tekniklere ve mobil uyumlulu\u011fa kadar, JavaScript&#039;in grafik yeteneklerini ke\u015ffedin.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/javascript-ile-etkilesimli-grafikler-olusturma-rehberi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-03T11:01:47+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"20 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javascript-ile-etkilesimli-grafikler-olusturma-rehberi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javascript-ile-etkilesimli-grafikler-olusturma-rehberi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"JavaScript ile Etkile\u015fimli Grafikler Olu\u015fturma Rehberi\",\"datePublished\":\"2025-11-03T11:01:47+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javascript-ile-etkilesimli-grafikler-olusturma-rehberi\/\"},\"wordCount\":4243,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Javascript\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/javascript-ile-etkilesimli-grafikler-olusturma-rehberi\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javascript-ile-etkilesimli-grafikler-olusturma-rehberi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/javascript-ile-etkilesimli-grafikler-olusturma-rehberi\/\",\"name\":\"JavaScript ile Etkile\u015fimli Grafikler Olu\u015fturma Rehberi\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-03T11:01:47+00:00\",\"description\":\"JavaScript kullanarak web sitenizde dinamik ve etkile\u015fimli veri g\u00f6rselle\u015ftirmeleri olu\u015fturmak m\u0131 istiyorsunuz? Bu kapsaml\u0131 rehber, basit bir \u00e7ubuk grafikten karma\u015f\u0131k dashboard'lara kadar her \u015feyi ad\u0131m ad\u0131m ele alarak, veri g\u00f6rselle\u015ftirme yolculu\u011funuzda size rehberlik edecek. Temel kavramlardan ba\u015flay\u0131p ileri d\u00fczey tekniklere ve mobil uyumlulu\u011fa kadar, JavaScript'in grafik yeteneklerini ke\u015ffedin.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javascript-ile-etkilesimli-grafikler-olusturma-rehberi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/javascript-ile-etkilesimli-grafikler-olusturma-rehberi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javascript-ile-etkilesimli-grafikler-olusturma-rehberi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"JavaScript ile Etkile\u015fimli Grafikler Olu\u015fturma Rehberi\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"JavaScript ile Etkile\u015fimli Grafikler Olu\u015fturma Rehberi","description":"JavaScript kullanarak web sitenizde dinamik ve etkile\u015fimli veri g\u00f6rselle\u015ftirmeleri olu\u015fturmak m\u0131 istiyorsunuz? Bu kapsaml\u0131 rehber, basit bir \u00e7ubuk grafikten karma\u015f\u0131k dashboard'lara kadar her \u015feyi ad\u0131m ad\u0131m ele alarak, veri g\u00f6rselle\u015ftirme yolculu\u011funuzda size rehberlik edecek. Temel kavramlardan ba\u015flay\u0131p ileri d\u00fczey tekniklere ve mobil uyumlulu\u011fa kadar, JavaScript'in grafik yeteneklerini ke\u015ffedin.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/javascript-ile-etkilesimli-grafikler-olusturma-rehberi\/","og_locale":"tr_TR","og_type":"article","og_title":"JavaScript ile Etkile\u015fimli Grafikler Olu\u015fturma Rehberi","og_description":"JavaScript kullanarak web sitenizde dinamik ve etkile\u015fimli veri g\u00f6rselle\u015ftirmeleri olu\u015fturmak m\u0131 istiyorsunuz? Bu kapsaml\u0131 rehber, basit bir \u00e7ubuk grafikten karma\u015f\u0131k dashboard'lara kadar her \u015feyi ad\u0131m ad\u0131m ele alarak, veri g\u00f6rselle\u015ftirme yolculu\u011funuzda size rehberlik edecek. Temel kavramlardan ba\u015flay\u0131p ileri d\u00fczey tekniklere ve mobil uyumlulu\u011fa kadar, JavaScript'in grafik yeteneklerini ke\u015ffedin.","og_url":"https:\/\/fatihsoysal.com\/blog\/javascript-ile-etkilesimli-grafikler-olusturma-rehberi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-03T11:01:47+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"20 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/javascript-ile-etkilesimli-grafikler-olusturma-rehberi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/javascript-ile-etkilesimli-grafikler-olusturma-rehberi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"JavaScript ile Etkile\u015fimli Grafikler Olu\u015fturma Rehberi","datePublished":"2025-11-03T11:01:47+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/javascript-ile-etkilesimli-grafikler-olusturma-rehberi\/"},"wordCount":4243,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Javascript"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/javascript-ile-etkilesimli-grafikler-olusturma-rehberi\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/javascript-ile-etkilesimli-grafikler-olusturma-rehberi\/","url":"https:\/\/fatihsoysal.com\/blog\/javascript-ile-etkilesimli-grafikler-olusturma-rehberi\/","name":"JavaScript ile Etkile\u015fimli Grafikler Olu\u015fturma Rehberi","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-03T11:01:47+00:00","description":"JavaScript kullanarak web sitenizde dinamik ve etkile\u015fimli veri g\u00f6rselle\u015ftirmeleri olu\u015fturmak m\u0131 istiyorsunuz? Bu kapsaml\u0131 rehber, basit bir \u00e7ubuk grafikten karma\u015f\u0131k dashboard'lara kadar her \u015feyi ad\u0131m ad\u0131m ele alarak, veri g\u00f6rselle\u015ftirme yolculu\u011funuzda size rehberlik edecek. Temel kavramlardan ba\u015flay\u0131p ileri d\u00fczey tekniklere ve mobil uyumlulu\u011fa kadar, JavaScript'in grafik yeteneklerini ke\u015ffedin.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/javascript-ile-etkilesimli-grafikler-olusturma-rehberi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/javascript-ile-etkilesimli-grafikler-olusturma-rehberi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/javascript-ile-etkilesimli-grafikler-olusturma-rehberi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"JavaScript ile Etkile\u015fimli Grafikler Olu\u015fturma Rehberi"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/33490","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=33490"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/33490\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=33490"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=33490"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=33490"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}