Skip to content

Commit e6800a6

Browse files
igorfialkomadprogrammer
authored andcommitted
add cadlestick chart
1 parent 0ceb862 commit e6800a6

File tree

8 files changed

+105
-19
lines changed

8 files changed

+105
-19
lines changed

core/shared/src/main/scala/plotly/Trace.scala

Lines changed: 45 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -200,10 +200,10 @@ object Bar {
200200
Option(xaxis),
201201
Option(yaxis),
202202
Option(error_y),
203-
Option(showlegend).map(b => b: Boolean),
203+
Option(showlegend) .map(b => b: Boolean),
204204
Option(hoverinfo),
205205
Option(textposition),
206-
Option(opacity).map(d => d: Double),
206+
Option(opacity) .map(d => d: Double),
207207
Option(width),
208208
Option(base)
209209
)
@@ -316,9 +316,50 @@ object Heatmap {
316316
Option(y),
317317
Option(x),
318318
Option(z),
319-
Option(autocolorscale).map(b => b: Boolean),
319+
Option(autocolorscale) .map(b => b: Boolean),
320320
Option(colorscale),
321-
Option(showscale).map(b => b: Boolean),
321+
Option(showscale) .map(b => b: Boolean),
322322
Option(name)
323323
)
324324
}
325+
326+
@data(optionSetters = true) class Candlestick(
327+
x: Option[Sequence] = None,
328+
close: Option[Sequence] = None,
329+
high: Option[Sequence] = None,
330+
low: Option[Sequence] = None,
331+
open: Option[Sequence] = None,
332+
decreasing: Option[Marker] = None,
333+
increasing: Option[Marker] = None,
334+
line: Option[Marker] = None,
335+
xaxis: Option[AxisReference] = None,
336+
yaxis: Option[AxisReference] = None
337+
) extends Trace
338+
339+
object Candlestick {
340+
@deprecated("Use Candlestick() and chain-call .with* methods on it instead", "0.8.0")
341+
def apply(
342+
x: Sequence = null,
343+
close: Sequence = null,
344+
high: Sequence = null,
345+
low: Sequence = null,
346+
open: Sequence = null,
347+
decreasing: Marker = null,
348+
increasing: Marker = null,
349+
line: Marker = null,
350+
xaxis: AxisReference = null,
351+
yaxis: AxisReference = null
352+
): Candlestick =
353+
Candlestick(
354+
Option(x),
355+
Option(close),
356+
Option(high),
357+
Option(low),
358+
Option(open),
359+
Option(decreasing),
360+
Option(increasing),
361+
Option(line),
362+
Option(xaxis),
363+
Option(yaxis)
364+
)
365+
}

core/shared/src/main/scala/plotly/element/Color.scala

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,12 @@ object Color {
2121
"blue",
2222
"cls", // ???
2323
"pink",
24-
"green"
24+
"green",
25+
"magenta"
2526
)
2627
}
2728

2829
@data class RGB(r: Int, g: Int, b: Int) extends Color
2930

3031
@data class HSL(h: Int, s: Int, l: Int) extends Color
31-
}
32+
}

core/shared/src/main/scala/plotly/layout/Annotation.scala

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package plotly
22
package layout
33

4-
import java.lang.{ Boolean => JBoolean }
4+
import java.lang.{ Boolean => JBoolean, Double => JDouble }
55

66
import dataclass.data
77
import plotly.element._
@@ -15,7 +15,9 @@ import plotly.element._
1515
yanchor: Option[Anchor] = None,
1616
text: Option[Element] = None,
1717
font: Option[Font] = None,
18-
showarrow: Option[Boolean] = None
18+
showarrow: Option[Boolean] = None,
19+
ax: Option[Double] = None,
20+
ay: Option[Double] = None
1921
)
2022

2123
object Annotation {
@@ -29,7 +31,9 @@ object Annotation {
2931
yanchor: Anchor = null,
3032
text: Element = null,
3133
font: Font = null,
32-
showarrow: JBoolean = null
34+
showarrow: JBoolean = null,
35+
ax: JDouble = null,
36+
ay: JDouble = null
3337
): Annotation =
3438
Annotation(
3539
Option(xref),
@@ -40,6 +44,8 @@ object Annotation {
4044
Option(yanchor),
4145
Option(text),
4246
Option(font),
43-
Option(showarrow).map(v => v: Boolean)
47+
Option(showarrow).map(v => v: Boolean),
48+
Option(ax).map(x => x: Double),
49+
Option(ay).map(x => x: Double)
4450
)
4551
}

core/shared/src/main/scala/plotly/layout/Axis.scala

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ import plotly.element._
2828
zeroline: Option[Boolean] = None,
2929
zerolinewidth: Option[Double] = None,
3030
zerolinecolor: Option[Color] = None,
31-
range: Option[(Double, Double)] = None,
31+
range: Option[Sequence] = None,
3232
autorange: Option[Boolean] = None,
3333
ticks: Option[Ticks] = None,
3434
domain: Option[(Double, Double)] = None,
@@ -41,7 +41,8 @@ import plotly.element._
4141
tickvals: Option[Sequence] = None,
4242
ticktext: Option[Sequence] = None,
4343
nticks: Option[Int] = None,
44-
automargin: Option[Boolean] = None
44+
automargin: Option[Boolean] = None,
45+
rangeslider: Option[RangeSlider],
4546
)
4647

4748
object Axis {
@@ -68,7 +69,7 @@ object Axis {
6869
zeroline: JBoolean = null,
6970
zerolinewidth: JDouble = null,
7071
zerolinecolor: Color = null,
71-
range: (Double, Double) = null,
72+
range: Sequence = null,
7273
autorange: JBoolean = null,
7374
ticks: Ticks = null,
7475
domain: (Double, Double) = null,
@@ -81,7 +82,8 @@ object Axis {
8182
tickvals: Sequence = null,
8283
ticktext: Sequence = null,
8384
nticks: JInt = null,
84-
automargin: JBoolean = null
85+
automargin: JBoolean = null,
86+
rangeslider: RangeSlider = null
8587
): Axis =
8688
Axis(
8789
Option(title),
@@ -118,6 +120,7 @@ object Axis {
118120
Option(tickvals),
119121
Option(ticktext),
120122
Option(nticks) .map(x => x: Int),
121-
Option(automargin) .map(x => x: Boolean)
123+
Option(automargin) .map(x => x: Boolean),
124+
Option(rangeslider)
122125
)
123126
}

core/shared/src/main/scala/plotly/layout/Layout.scala

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,9 @@ import plotly.element._
3333
bargroupgap: Option[Double] = None,
3434
hovermode: Option[HoverMode] = None,
3535
boxmode: Option[BoxMode] = None,
36-
scene: Option[Scene] = None
37-
36+
scene: Option[Scene] = None,
37+
dragmode: Option[String],
38+
shapes: Option[Seq[Shape]]
3839
)
3940

4041
object Layout {
@@ -66,7 +67,9 @@ object Layout {
6667
bargroupgap: JDouble = null,
6768
hovermode: HoverMode = null,
6869
boxmode: BoxMode = null,
69-
scene: Scene = null
70+
scene: Scene = null,
71+
dragmode: String = null,
72+
shapes: Seq[Shape] = null
7073
): Layout =
7174
new Layout(
7275
Option(title),
@@ -95,6 +98,8 @@ object Layout {
9598
Option(bargroupgap).map(x => x),
9699
Option(hovermode),
97100
Option(boxmode),
98-
Option(scene)
101+
Option(scene),
102+
Option(dragmode),
103+
Option(shapes)
99104
)
100105
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package plotly.layout
2+
3+
import dataclass.data
4+
import plotly.Sequence
5+
6+
@data class RangeSlider(
7+
range: Option[Sequence]
8+
)
9+
object RangeSlider {
10+
def apply(range: Sequence = null): RangeSlider = RangeSlider(Option(range))
11+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package plotly.layout
2+
3+
import dataclass.data
4+
import plotly.element.{Color, Line}
5+
6+
@data class Shape (
7+
`type`: Option[String],
8+
xref: Option[String],
9+
yref: Option[String],
10+
x0: Option[String],
11+
y0: Option[Double],
12+
x1: Option[String],
13+
y1: Option[Double],
14+
fillcolor: Option[Color],
15+
opacity: Option[Double],
16+
line: Option[Line],
17+
)

tests/src/test/scala/plotly/doc/DocumentationTests.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,8 @@ class DocumentationTests extends AnyFlatSpec with Matchers {
229229
"basic/horizontal-bar",
230230
// TODO? Pie charts
231231
"financial/time-series",
232+
"financial/candlestick-charts",
233+
// "financial/ohlc",
232234
"basic/bubble",
233235
"basic/area",
234236
"layout/sizing",

0 commit comments

Comments
 (0)