質問するログイン新規登録

質問編集履歴

2

追記

2018/10/24 05:33

投稿

MORIZOU
MORIZOU

スコア12

title CHANGED
File without changes
body CHANGED
@@ -14,6 +14,9 @@
14
14
  ```html
15
15
  <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.1/Chart.bundle.min.js"></script>
16
16
  <script src="palette.js" type="text/javascript"></script>
17
+ <body>
18
+ <canvas id="mybarChart2" height="245" width="550"></canvas>
19
+ </body>
17
20
  <script>
18
21
  var myChart = "mybarChart2";
19
22
  var xlabel = ["111", "222", "333", "444", "555", "666", "777"];

1

ソースコードの追加

2018/10/24 05:33

投稿

MORIZOU
MORIZOU

スコア12

title CHANGED
File without changes
body CHANGED
@@ -9,4 +9,163 @@
9
9
 
10
10
  探し方が悪いのか見つけられずに困っています。どなたかご教授下さい。
11
11
  Chart.jsは2.7.1を使用しています。
12
- ![イメージ説明](6ea43e69ee299f0e05154e2fa5b6996e.jpeg)
12
+ ![イメージ説明](6ea43e69ee299f0e05154e2fa5b6996e.jpeg)
13
+
14
+ ```html
15
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.1/Chart.bundle.min.js"></script>
16
+ <script src="palette.js" type="text/javascript"></script>
17
+ <script>
18
+ var myChart = "mybarChart2";
19
+ var xlabel = ["111", "222", "333", "444", "555", "666", "777"];
20
+ var ylabel = ["あいうえお", "かきくけこ", "さしすせそ", "たちつてと", "なにぬねの", "はひふへほ", "まみむめも", "やゆよ", "らりるれろ", "わを", "ん", "ん"];
21
+ var hlxlabel = [];
22
+ for(count in xlabel){
23
+ var string ="";
24
+ if(xlabel[count].length >= 7){
25
+ string = xlabel[count].substr(0,6) + '…';
26
+ }else{
27
+ string = xlabel[count]
28
+ }
29
+ hlxlabel.push(string);
30
+ }
31
+ var hlylabel = [];
32
+ for(count in ylabel){
33
+ var string ="";
34
+ if(ylabel[count].length >= 7){
35
+ string = ylabel[count].substr(0,6) + '…';
36
+ }else{
37
+ string = ylabel[count]
38
+ }
39
+ hlylabel.push(string);
40
+ }
41
+ var colors = palette('rainbow', ylabel.length, 0, .5).map(function(hex) {return '#' + hex;})
42
+ var dataLabelPlugin = {
43
+ afterDatasetsDraw: function (chart, easing) {
44
+ var ctx = chart.ctx;
45
+ var sums = [];
46
+ chart.data.datasets.forEach(function (dataset, i) {
47
+ var meta = chart.getDatasetMeta(i);
48
+ if (!meta.hidden) {
49
+ meta.data.forEach(function (element, index) {
50
+ // 積み上げ総計の初期化
51
+ if(i === 0){
52
+ sums[index] = 0;
53
+ }
54
+ // 総計ラベルの設定
55
+ ctx.fillStyle = 'rgb(0, 0, 0)';
56
+ var fontSize = 11;
57
+ var fontStyle = 'normal';
58
+ var fontFamily = 'Helvetica Neue';
59
+ ctx.font = Chart.helpers.fontString(fontSize, fontStyle, fontFamily);
60
+ ctx.textAlign = 'center';
61
+ ctx.textBaseline = 'middle';
62
+ var padding = 0;
63
+ var position = element.tooltipPosition();
64
+ // 総計出力
65
+ sums[index] = sums[index] + dataset.data[index];
66
+ if(i === (chart.data.datasets.length -1)){
67
+ ctx.fillText(sums[index].toString(), position.x, position.y - (fontSize / 2) - padding);
68
+ }
69
+ });
70
+ }
71
+ });
72
+ }
73
+ }
74
+ var chart = new Chart(myChart, {
75
+ type: 'bar',
76
+ data: {
77
+ labels: hlxlabel,
78
+ datasets: [
79
+ {label: ylabel[0],backgroundColor: colors[0],data: [1, 4, 3, 2, 5, 5, 8]},
80
+ {label: ylabel[1],backgroundColor: colors[1],data: [1, 4, 3, 2, 5, 9, 8]},
81
+ {label: ylabel[2],backgroundColor: colors[2],data: [1, 4, 3, 2, 5, 9, 8]},
82
+ {label: ylabel[3],backgroundColor: colors[3],data: [1, 4, 3, 2, 5, 9, 8]},
83
+ {label: ylabel[4],backgroundColor: colors[4],data: [1, 4, 3, 2, 5, 9, 8]},
84
+ {label: ylabel[5],backgroundColor: colors[5],data: [1, 4, 3, 2, 5, 9, 8]},
85
+ {label: ylabel[6],backgroundColor: colors[6],data: [1, 4, 3, 2, 5, 9, 8]},
86
+ {label: ylabel[7],backgroundColor: colors[7],data: [1, 4, 3, 2, 5, 9, 8]},
87
+ {label: ylabel[8],backgroundColor: colors[8],data: [1, 4, 3, 2, 5, 9, 8]},
88
+ {label: ylabel[9],backgroundColor: colors[9],data: [1, 4, 3, 2, 5, 9, 8]},
89
+ {label: ylabel[10],backgroundColor: colors[10],data: [1, 4, 3, 2, 5, 9, 8]},
90
+ {label: ylabel[11],backgroundColor: colors[11],data: [1, 4, 3, 2, 5, 9, 8]},
91
+ ]
92
+ },
93
+ options: {
94
+ title:{
95
+ text:"数字 × ひらがな",
96
+ display:true,
97
+ fontSize:17,
98
+ fontStyle:'normal',
99
+ padding:10,
100
+ },
101
+ scales : {
102
+ xAxes : [ {
103
+ stacked : true,
104
+ categoryPercentage : 0.5,
105
+ ticks : {
106
+ autoSkip : false,
107
+ maxRotation : 30,
108
+ },
109
+ } ],
110
+ yAxes : [ {
111
+ stacked : true
112
+ } ],
113
+ },
114
+ legend:{
115
+ labels:{
116
+ boxWidth:10,
117
+ fontSize:10,
118
+ padding:6,
119
+ generateLabels: function(chart){
120
+ return chart.data.datasets.map( function( dataset, i){
121
+ return {
122
+ text: hlylabel[i],
123
+ fillStyle: dataset.backgroundColor,
124
+
125
+ };
126
+ })
127
+ },
128
+ },
129
+ display: true,
130
+ position: "right",
131
+ },
132
+ maintainAspectRatio: false,
133
+ responsive: false,
134
+ tooltips:{
135
+ mode:'label',
136
+ position: 'customMode',//nearest
137
+ callbacks:{
138
+ title: function (tooltipItem, data){
139
+ return xlabel[tooltipItem[0].index];
140
+ },
141
+ },
142
+ },
143
+ },
144
+ plugins: [dataLabelPlugin]
145
+ });
146
+
147
+ Chart.Tooltip.positioners.customMode = function(elements, eventPosition){
148
+ var tooltip = this;
149
+ if(!elements.length){
150
+ return false;
151
+ }
152
+ var i, le;
153
+ var x = 0;
154
+ var y = 0;
155
+ var count = 0;
156
+ for(i = 0, len = elements.length; i < len; ++i){
157
+ var el = elements[i];
158
+ if(el && el.hasValue()){
159
+ var pos = el.tooltipPosition();
160
+ x += pos.x;
161
+ y += pos.y
162
+ ++count;
163
+ }
164
+ }
165
+ return{
166
+ x: Math.round(x / count),
167
+ y: 207//Math.round(y / count)
168
+ };
169
+ }
170
+ </script>
171
+ ```