Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
C
c3-closed
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
charts
c3-closed
Commits
461acadb
Commit
461acadb
authored
Feb 18, 2014
by
Masayuki Tanaka
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix bar offset when multiple negative values - #30
parent
83f66a88
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
75 additions
and
32 deletions
+75
-32
c3.js
c3.js
+75
-32
No files found.
c3.js
View file @
461acadb
...
@@ -444,29 +444,51 @@
...
@@ -444,29 +444,51 @@
//-- Domain --//
//-- Domain --//
function
getYDomainMin
(
targets
)
{
function
getYDomainMin
(
targets
)
{
return
d3
.
min
(
targets
,
function
(
t
)
{
return
d3
.
min
(
t
.
values
,
function
(
v
)
{
return
v
.
value
;
});
});
var
ys
=
getValuesAsIdKeyed
(
targets
),
j
,
k
,
baseId
,
id
,
hasNegativeValue
;
}
if
(
__data_groups
.
length
>
0
)
{
function
getYDomainMax
(
targets
)
{
hasNegativeValue
=
hasNegativeValueInTargets
(
targets
);
var
ys
=
{},
j
,
k
;
for
(
j
=
0
;
j
<
__data_groups
.
length
;
j
++
)
{
if
(
hasNegativeValue
)
{
targets
.
forEach
(
function
(
t
)
{
ys
[
__data_groups
[
j
][
0
]].
forEach
(
function
(
v
,
i
)
{
ys
[
t
.
id
]
=
[];
ys
[
__data_groups
[
j
][
0
]][
i
]
=
v
<
0
?
v
:
0
;
t
.
values
.
forEach
(
function
(
v
)
{
ys
[
t
.
id
].
push
(
v
.
value
);
});
});
}
baseId
=
__data_groups
[
j
][
0
];
for
(
k
=
1
;
k
<
__data_groups
[
j
].
length
;
k
++
)
{
id
=
__data_groups
[
j
][
k
];
if
(
!
ys
[
id
])
{
continue
;
}
ys
[
id
].
forEach
(
function
(
v
,
i
)
{
if
(
getAxisId
(
id
)
===
getAxisId
(
baseId
)
&&
ys
[
baseId
]
&&
!
(
hasNegativeValue
&&
+
v
>
0
))
{
ys
[
baseId
][
i
]
+=
+
v
;
}
});
});
}
}
}
return
d3
.
min
(
Object
.
keys
(
ys
).
map
(
function
(
key
)
{
return
d3
.
min
(
ys
[
key
]);
}));
}
function
getYDomainMax
(
targets
)
{
var
ys
=
getValuesAsIdKeyed
(
targets
),
j
,
k
,
baseId
,
id
,
hasPositiveValue
;
if
(
__data_groups
.
length
>
0
)
{
hasPositiveValue
=
hasPositiveValueInTargets
(
targets
);
for
(
j
=
0
;
j
<
__data_groups
.
length
;
j
++
)
{
for
(
j
=
0
;
j
<
__data_groups
.
length
;
j
++
)
{
if
(
hasPositiveValue
)
{
ys
[
__data_groups
[
j
][
0
]].
forEach
(
function
(
v
,
i
)
{
ys
[
__data_groups
[
j
][
0
]][
i
]
=
v
>
0
?
v
:
0
;
});
}
baseId
=
__data_groups
[
j
][
0
];
for
(
k
=
1
;
k
<
__data_groups
[
j
].
length
;
k
++
)
{
for
(
k
=
1
;
k
<
__data_groups
[
j
].
length
;
k
++
)
{
if
(
!
isBarType
(
__data_groups
[
j
][
k
]))
{
continue
;
}
id
=
__data_groups
[
j
][
k
];
if
(
isUndefined
(
ys
[
__data_groups
[
j
][
k
]])
)
{
continue
;
}
if
(
!
ys
[
id
]
)
{
continue
;
}
ys
[
__data_groups
[
j
][
k
]
].
forEach
(
function
(
v
,
i
)
{
ys
[
id
].
forEach
(
function
(
v
,
i
)
{
if
(
getAxisId
(
__data_groups
[
j
][
k
])
===
getAxisId
(
__data_groups
[
j
][
0
])
&&
ys
[
__data_groups
[
j
][
0
]]
)
{
if
(
getAxisId
(
id
)
===
getAxisId
(
baseId
)
&&
ys
[
baseId
]
&&
!
(
hasPositiveValue
&&
+
v
<
0
)
)
{
ys
[
__data_groups
[
j
][
0
]
][
i
]
+=
+
v
;
ys
[
baseId
][
i
]
+=
+
v
;
}
}
});
});
}
}
}
}
}
return
d3
.
max
(
Object
.
keys
(
ys
).
map
(
function
(
key
)
{
return
d3
.
max
(
ys
[
key
]);
}));
return
d3
.
max
(
Object
.
keys
(
ys
).
map
(
function
(
key
)
{
return
d3
.
max
(
ys
[
key
]);
}));
}
}
function
getYDomain
(
axisId
)
{
function
getYDomain
(
axisId
)
{
...
@@ -491,7 +513,6 @@
...
@@ -491,7 +513,6 @@
padding_top
=
isDefined
(
__axis_y2_padding
.
top
)
?
__axis_y2_padding
.
top
:
padding
;
padding_top
=
isDefined
(
__axis_y2_padding
.
top
)
?
__axis_y2_padding
.
top
:
padding
;
padding_bottom
=
isDefined
(
__axis_y2_padding
.
bottom
)
?
__axis_y2_padding
.
bottom
:
padding
;
padding_bottom
=
isDefined
(
__axis_y2_padding
.
bottom
)
?
__axis_y2_padding
.
bottom
:
padding
;
}
}
return
[
yDomainMin
-
padding_bottom
,
yDomainMax
+
padding_top
];
return
[
yDomainMin
-
padding_bottom
,
yDomainMax
+
padding_top
];
}
}
function
getXDomainRatio
(
isSub
)
{
function
getXDomainRatio
(
isSub
)
{
...
@@ -725,6 +746,34 @@
...
@@ -725,6 +746,34 @@
function
getTargets
(
filter
)
{
function
getTargets
(
filter
)
{
return
isDefined
(
filter
)
?
c3
.
data
.
targets
.
filter
(
filter
)
:
c3
.
data
.
targets
;
return
isDefined
(
filter
)
?
c3
.
data
.
targets
.
filter
(
filter
)
:
c3
.
data
.
targets
;
}
}
function
getValuesAsIdKeyed
(
targets
)
{
var
ys
=
{};
targets
.
forEach
(
function
(
t
)
{
ys
[
t
.
id
]
=
[];
t
.
values
.
forEach
(
function
(
v
)
{
ys
[
t
.
id
].
push
(
v
.
value
);
});
});
return
ys
;
}
function
checkValueInTargets
(
targets
,
checker
)
{
var
ids
=
Object
.
keys
(
targets
),
i
,
j
,
values
;
for
(
i
=
0
;
i
<
ids
.
length
;
i
++
)
{
values
=
targets
[
ids
[
i
]].
values
;
for
(
j
=
0
;
j
<
values
.
length
;
j
++
)
{
if
(
checker
(
values
[
j
].
value
))
{
return
true
;
}
}
}
return
false
;
}
function
hasNegativeValueInTargets
(
targets
)
{
return
checkValueInTargets
(
targets
,
function
(
v
)
{
return
v
<
0
;
});
}
function
hasPositiveValueInTargets
(
targets
)
{
return
checkValueInTargets
(
targets
,
function
(
v
)
{
return
v
>
0
;
});
}
function
category
(
i
)
{
function
category
(
i
)
{
return
i
<
__axis_x_categories
.
length
?
__axis_x_categories
[
i
]
:
i
;
return
i
<
__axis_x_categories
.
length
?
__axis_x_categories
[
i
]
:
i
;
}
}
...
@@ -902,7 +951,7 @@
...
@@ -902,7 +951,7 @@
};
};
}
}
function
getBarY
(
isSub
)
{
function
getBarY
(
isSub
)
{
return
function
(
d
,
i
)
{
return
function
(
d
)
{
var
scale
=
isSub
?
getSubYScale
(
d
.
id
)
:
getYScale
(
d
.
id
);
var
scale
=
isSub
?
getSubYScale
(
d
.
id
)
:
getYScale
(
d
.
id
);
return
scale
(
d
.
value
);
return
scale
(
d
.
value
);
};
};
...
@@ -910,12 +959,12 @@
...
@@ -910,12 +959,12 @@
function
getBarOffset
(
barIndices
,
isSub
)
{
function
getBarOffset
(
barIndices
,
isSub
)
{
var
indicesIds
=
Object
.
keys
(
barIndices
);
var
indicesIds
=
Object
.
keys
(
barIndices
);
return
function
(
d
,
i
)
{
return
function
(
d
,
i
)
{
var
offset
=
0
;
var
scale
=
isSub
?
getSubYScale
(
d
.
id
)
:
getYScale
(
d
.
id
),
var
scale
=
isSub
?
getSubYScale
(
d
.
id
)
:
getYScale
(
d
.
id
)
;
y0
=
scale
(
0
),
offset
=
y0
;
getTargets
(
isBarType
).
forEach
(
function
(
t
)
{
getTargets
(
isBarType
).
forEach
(
function
(
t
)
{
if
(
t
.
id
===
d
.
id
||
barIndices
[
t
.
id
]
!==
barIndices
[
d
.
id
])
{
return
;
}
if
(
t
.
id
===
d
.
id
||
barIndices
[
t
.
id
]
!==
barIndices
[
d
.
id
])
{
return
;
}
if
(
indicesIds
.
indexOf
(
t
.
id
)
<
indicesIds
.
indexOf
(
d
.
id
)
&&
t
.
values
[
i
].
value
*
d
.
value
>
0
)
{
if
(
indicesIds
.
indexOf
(
t
.
id
)
<
indicesIds
.
indexOf
(
d
.
id
)
&&
t
.
values
[
i
].
value
*
d
.
value
>
0
)
{
offset
+=
scale
(
t
.
values
[
i
].
value
);
offset
+=
scale
(
t
.
values
[
i
].
value
)
-
y0
;
}
}
});
});
return
offset
;
return
offset
;
...
@@ -930,13 +979,6 @@
...
@@ -930,13 +979,6 @@
}
}
return
barW
;
return
barW
;
}
}
function
getBarH
(
height
,
isSub
)
{
var
h
=
height
===
null
?
function
(
v
)
{
return
v
;
}
:
function
(
v
)
{
return
height
>
v
?
height
-
v
:
0
;
};
return
function
(
d
)
{
var
scale
=
isSub
?
getSubYScale
(
d
.
id
)
:
getYScale
(
d
.
id
);
return
h
(
scale
(
d
.
value
));
};
}
//-- Type --//
//-- Type --//
...
@@ -959,10 +1001,10 @@
...
@@ -959,10 +1001,10 @@
function hasLineType(targets) {
function hasLineType(targets) {
return hasType(targets, 'line');
return hasType(targets, 'line');
}
}
*/
function hasBarType(targets) {
function hasBarType(targets) {
return hasType(targets, 'bar');
return hasType(targets, 'bar');
}
}
*/
function
hasScatterType
(
targets
)
{
function
hasScatterType
(
targets
)
{
return
hasType
(
targets
,
'scatter'
);
return
hasType
(
targets
,
'scatter'
);
}
}
...
@@ -1833,7 +1875,6 @@
...
@@ -1833,7 +1875,6 @@
var
xgrid
,
xgridData
,
xgridLine
,
ygrid
;
var
xgrid
,
xgridData
,
xgridLine
,
ygrid
;
var
mainCircle
,
mainBar
,
mainRegion
,
contextBar
,
eventRectUpdate
;
var
mainCircle
,
mainBar
,
mainRegion
,
contextBar
,
eventRectUpdate
;
var
barIndices
=
getBarIndices
(),
barTargetsNum
=
barIndices
.
__max__
+
1
,
maxDataCountTarget
;
var
barIndices
=
getBarIndices
(),
barTargetsNum
=
barIndices
.
__max__
+
1
,
maxDataCountTarget
;
var
barX
,
barY
,
barW
,
barH
;
var
rectX
,
rectW
;
var
rectX
,
rectW
;
var
withY
,
withSubchart
,
withTransition
,
withUpdateXDomain
,
withUpdateOrgXDomain
;
var
withY
,
withSubchart
,
withTransition
,
withUpdateXDomain
,
withUpdateOrgXDomain
;
var
isPieChart
;
var
isPieChart
;
...
@@ -1961,14 +2002,14 @@
...
@@ -1961,14 +2002,14 @@
var
indexX
=
isSub
||
!
__axis_rotated
?
0
:
1
;
var
indexX
=
isSub
||
!
__axis_rotated
?
0
:
1
;
var
indexY
=
isSub
||
!
__axis_rotated
?
1
:
0
;
var
indexY
=
isSub
||
!
__axis_rotated
?
1
:
0
;
var
path
=
'M '
+
points
[
0
][
indexX
]
+
','
+
points
[
0
][
indexY
]
+
' '
+
var
path
=
'M '
+
points
[
0
][
indexX
]
+
','
+
points
[
0
][
indexY
]
+
' '
+
'L'
+
points
[
1
][
indexX
]
+
','
+
points
[
1
][
indexY
]
+
' '
+
'L'
+
points
[
1
][
indexX
]
+
','
+
points
[
1
][
indexY
]
+
' '
+
'L'
+
points
[
2
][
indexX
]
+
','
+
points
[
2
][
indexY
]
+
' '
+
'L'
+
points
[
2
][
indexX
]
+
','
+
points
[
2
][
indexY
]
+
' '
+
'L'
+
points
[
3
][
indexX
]
+
','
+
points
[
3
][
indexY
]
+
' '
+
'L'
+
points
[
3
][
indexX
]
+
','
+
points
[
3
][
indexY
]
+
' '
+
'z'
;
'z'
;
return
path
;
return
path
;
}
}
;
};
};
mainBar
=
main
.
selectAll
(
'.-bars'
).
selectAll
(
'.-bar'
)
mainBar
=
main
.
selectAll
(
'.-bars'
).
selectAll
(
'.-bar'
)
...
@@ -1977,12 +2018,14 @@
...
@@ -1977,12 +2018,14 @@
mainBar
.
enter
().
append
(
'path'
)
mainBar
.
enter
().
append
(
'path'
)
.
attr
(
'd'
,
drawBar
(
false
))
.
attr
(
'd'
,
drawBar
(
false
))
.
style
(
"stroke"
,
'none'
)
.
style
(
"stroke"
,
'none'
)
.
style
(
"opacity"
,
0
)
.
style
(
"fill"
,
function
(
d
)
{
return
color
(
d
.
id
);
})
.
style
(
"fill"
,
function
(
d
)
{
return
color
(
d
.
id
);
})
.
attr
(
"class"
,
classBar
);
.
attr
(
"class"
,
classBar
);
mainBar
mainBar
.
transition
().
duration
(
duration
)
.
transition
().
duration
(
duration
)
.
attr
(
'd'
,
drawBar
(
false
));
.
attr
(
'd'
,
drawBar
(
false
))
.
style
(
"opacity"
,
1
);
mainBar
.
exit
().
transition
().
duration
(
duration
)
mainBar
.
exit
().
transition
().
duration
(
duration
)
.
style
(
'opacity'
,
0
)
.
style
(
'opacity'
,
0
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment