跳到主要內容

精選文章

【公開聲明】關於近期網路特定言論與個資洩漏事件的說明

大家好,我是江舜智(紅色死神)。 近期有許多長期關注我的朋友、學生以及合作夥伴向我反映,網路上有特定人士(Threads 帳號 @drama.note)持續在各類與事件無直接關聯的討論串、課程資訊以及公開貼文下方留言,並引導他人前往我的個人網站與公開平台,同時以負面標籤及特定敘事方式討論我個人。 由於相關行為已持續相當長一段時間,甚至延伸至現實生活層面,對我的合作單位、教學夥伴以及部分學生造成困擾與壓力,我對此感到遺憾,也對受到影響的朋友們表達歉意。 因此,我希望藉此機會向所有關心此事的朋友,說明我的立場與態度。 一、關於事件本身:理性討論永遠受到歡迎 多年來,不論是在軟體開發、網頁前端教學領域,或是經營「Uniform Map 制服地圖」、進行攝影創作與分享個人觀點時,我始終相信公開透明與理性交流的重要性。 我並非完美的人,任何人都可能有思慮不周或與他人意見不同的時候。過去關於網站經營模式與相關議題,網路上確實出現過不少討論與質疑,而相關事項也曾進入司法程序接受調查。 經檢察機關完整調查後,最終依法作出不起訴處分,案件已告確定。 這代表相關指控經過司法審查後,並未認定存在違法情事。即使如此,我仍然願意以開放的態度面對外界意見。 如果有人對於我的教學內容、網站運作方式,或任何公開言論抱持不同看法,我始終歡迎在尊重彼此的前提下進行公開且理性的討論。 若有任何值得檢討與改進之處,我也願意虛心接受建設性的批評與建議。 二、關於持續性的騷擾行為:應以事實與法律為依據 我認為理性討論與持續性騷擾之間,存在明確界線。 近一年來,特定人士的部分行為已不再只是針對議題提出意見,而是逐漸演變成持續性的人身攻擊與現實層面的干擾,包括: • 在與事件無直接關聯的課程公告、教學資訊及各類公開討論串中,反覆張貼我的個人資訊與相關內容。 • 主動聯繫我的合作單位與工作相關機構,對其施加壓力或進行干擾。 • 在司法程序進行期間及收到相關通知後,仍持續以指名道姓方式發布涉及人格評價與攻擊性的言論。 我尊重每個人表達意見與監督公共議題的權利,但我同樣認為,任何討論都應建立在事實基礎上,並尊重法律程序與他人的基本權益。 無論支持或反對我的人,都有權自行查閱公開資訊、了解案件經過並形成自己的判斷,而不是透過片面標籤或情緒性指控來取代事實。 三、我的處理方式 對於相關爭議,我始終選擇透過法律與制度來處理,...

[D3.js] 圓餅圖



D3.js 可以很輕易的繪製圓餅圖出來,就用範例來說明

  1. //Width and height   
  2.             var w = 300;   
  3.             var h = 300;   
  4.             //資料   
  5.             var dataset = [ 5, 10, 20, 45, 6, 25 ];   
  6.   
  7.             var outerRadius = w / 2;   
  8.             //如果大於0就會是甜甜圈   
  9.             var innerRadius = 0;   
  10.             var arc = d3.svg.arc()   
  11.                             .innerRadius(innerRadius)   
  12.                             .outerRadius(outerRadius);   
  13.                
  14.             var pie = d3.layout.pie();   
  15.                
  16.             //Easy colors accessible via a 10-step ordinal scale   
  17.             var color = d3.scale.category10();   
  18.   
  19.             //Create SVG element   
  20.             var svg = d3.select("body")   
  21.                         .append("svg")   
  22.                         .attr("width", w)   
  23.                         .attr("height", h);   
  24.                
  25.             //Set up groups   
  26.             var arcs = svg.selectAll("g.arc")   
  27.                           .data(pie(dataset))   
  28.                           .enter()   
  29.                           .append("g")   
  30.                           .attr("class""arc")   
  31.                           .attr("transform""translate(" + outerRadius + "," + outerRadius + ")");   
  32.                
  33.             //Draw arc paths   
  34.             arcs.append("path")   
  35.                 .attr("fill"function(d, i) {   
  36.                     return color(i);   
  37.                 })   
  38.                 .attr("d", arc);   
  39.                
  40.             //Labels   
  41.             arcs.append("text")   
  42.                 .attr("transform"function(d) {   
  43.                     //設定文字在各區塊中央   
  44.                     return "translate(" + arc.centroid(d) + ")";   
  45.                 })   
  46.                 .attr("text-anchor""middle")   
  47.                 .text(function(d) {   
  48.                     return d.value;   
  49.                 });  




若要調整 label 位置,則可設定 var labelr = r+20;
並在設定位置時根據原本算出來的中心點調整
var c = arc.centroid(d),
x = c[0],
y = c[1],
h = Math.sqrt(x*x + y*y);
return "translate(" + (x/h * labelr) + ',' +
(y/h * labelr) + ")";
完整範例在此

  1. var dataset=[{"id":"1","map":"tw","count":530,"badge":73,"name_tw":"\u53f0\u7063","name_cn":"\u53f0\u6e7e\u9ad8\u6821","name_jp":"\u53f0\u6e7e\u9ad8\u6821","name_en":"Taiwan"},{"id":"2","map":"hk","zoom":"11","zoom_m":"11","count":426,"badge":20,"name_tw":"\u9999\u6e2f","name_cn":"\u9999\u6e2f","name_jp":"\u9999\u6e2f","name_en":"Hong Kong","lng":"114.154602","lat":"22.354245"},{"id":"3","map":"jr","count":782,"badge":17,"name_tw":"\u53f0\u7063\u570b\u4e2d","name_cn":"\u53f0\u6e7e\u4e2d\u5b66","name_jp":"\u53f0\u6e7e\u4e2d\u5b66","name_en":"Taiwan Junior High School"},{"id":"4","map":"my","count":203,"badge":41,"name_tw":"\u99ac\u4f86\u897f\u4e9e","name_cn":"\u9a6c\u6765\u897f\u4e9a","name_jp":"\u30de\u30ec\u30fc\u30b7\u30a2","name_en":"Malysia"},{"id":"5","map":"bn","count":18,"badge":50,"name_tw":"\u6c76\u840a","name_cn":"\u6587\u83b1","name_jp":"\u30d6\u30eb\u30cd\u30a4","name_en":"Brunei"},{"id":"6","map":"sg","count":63,"badge":65,"name_tw":"\u65b0\u52a0\u5761","name_cn":"\u65b0\u52a0\u5761","name_jp":"\u30b7\u30f3\u30ac\u30dd\u30fc\u30eb","name_en":"Singapore","lng":"103.806496","lat":"1.349736"},{"id":"7","map":"mo","count":43,"badge":70,"name_tw":"\u6fb3\u9580","name_cn":"\u6fb3\u95e8","name_jp":"\u30de\u30ab\u30aa","name_en":"Macau"},{"id":"8","map":"id","count":21,"badge":71,"name_tw":"\u5370\u5c3c","name_cn":"\u5370\u5c3c","name_jp":"\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2","name_en":"Indonesia"}]   
  2.   
  3. //Width and height   
  4.       var w = 600;   
  5.       var h = 400;   
  6.       var r = Math.min(w, h) / 3;   
  7.       var labelr = r+20;   
  8.   
  9.       var outerRadius = h / 3;   
  10.       var innerRadius = 0;   
  11.       var arc = d3.svg.arc()   
  12.               .innerRadius(innerRadius)   
  13.               .outerRadius(outerRadius);   
  14.          
  15.       var pie = d3.layout.pie().value(function(d) { return d.count; }).sort( function(d) { return null; } );;   
  16.          
  17.       //Easy colors accessible via a 10-step ordinal scale   
  18.       var color = d3.scale.category10();   
  19.   
  20.       //Create SVG element   
  21.       var svg = d3.select("#piechart")   
  22.             .append("svg")   
  23.             .attr("width", w)   
  24.             .attr("height", h);   
  25.          
  26.       svg.append("g")   
  27.   .attr("class""labels");   
  28.       //Set up groups   
  29.       var arcs = svg.selectAll("g.arc")   
  30.               .data(pie(dataset))   
  31.               .enter()   
  32.               .append("g")   
  33.               .attr("class""arc")   
  34.               .attr("transform""translate(" + w/3 + "," + h/2 + ")");   
  35.          
  36.       //Draw arc paths   
  37.       arcs.append("path")   
  38.           .attr("fill"function(d, i) {   
  39.             return color(i);   
  40.           })   
  41.           .attr("d", arc);   
  42.   
  43.           arcs.append("text")   
  44.           .attr("x", 240)   
  45.           .attr("y"function(d, i){   
  46.             return i*24-100;   
  47.           })   
  48.           .attr("fill"function(d, i) {   
  49.             return color(i);   
  50.           })   
  51.           .text(function(d, i) {   
  52.             return d.data.name_tw+": "+d.data.count;   
  53.           });   
  54.       //Labels   
  55.       arcs.append("text")   
  56.           .attr("transform"function(d) {   
  57.           var c = arc.centroid(d),   
  58.               x = c[0],   
  59.               y = c[1],   
  60.               // pythagorean theorem for hypotenuse   
  61.               h = Math.sqrt(x*x + y*y);   
  62.           return "translate(" + (x/h * labelr) +  ',' +   
  63.              (y/h * labelr) +  ")";    
  64.           })   
  65.           .attr("class""pie_text")   
  66.           .attr("text-anchor""middle")   
  67.           .text(function(d, i) {   
  68.             return d.data.name_tw;   
  69.           });  

留言

熱門文章