-
Notifications
You must be signed in to change notification settings - Fork 0
/
plot.go
122 lines (113 loc) · 2.87 KB
/
plot.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
/* create instance of go-echarts*/
package render
import (
"github.com/go-echarts/go-echarts/v2/charts"
"github.com/go-echarts/go-echarts/v2/opts"
"github.com/go-echarts/go-echarts/v2/types"
"github.com/wf001/github-insight/parse"
"github.com/wf001/github-insight/util"
)
type Charts struct {
ChartActivitiesBar *charts.Bar
ChartCommittersPie *charts.Pie
ChartLanguagePie *charts.Pie
ChartIssueStack *charts.Line
}
func plotDailyCommits(c parse.DailyCommits, y []string) *charts.Bar {
bar := charts.NewBar()
bar.SetGlobalOptions(
charts.WithInitializationOpts(
opts.Initialization{
Theme: types.ThemeShine,
Width: "100%",
Height: "100%",
},
),
charts.WithTooltipOpts(opts.Tooltip{Show: true}),
)
barItems := make([]opts.BarData, 0)
for _, v := range c {
barItems = append(barItems, opts.BarData{Value: v.Amount})
}
bar.SetXAxis(y).
AddSeries("commits", barItems).
SetSeriesOptions(charts.WithLineChartOpts(opts.LineChart{Smooth: true}))
return bar
}
func plotRepoLang(lang parse.Languages) *charts.Pie {
pie := charts.NewPie()
pie.SetGlobalOptions(
charts.WithInitializationOpts(
opts.Initialization{
Theme: types.ThemeShine,
Width: "90%",
},
),
charts.WithTooltipOpts(opts.Tooltip{Show: true}),
)
pieItems := make([]opts.PieData, 0)
for _, v := range lang {
pieItems = append(pieItems, opts.PieData{Name: v.Name, Value: v.Amount})
}
pie.AddSeries("Language", pieItems)
return pie
}
func plotCommittersPie(c parse.Committers) *charts.Pie {
pie := charts.NewPie()
pie.SetGlobalOptions(
charts.WithInitializationOpts(
opts.Initialization{
Theme: types.ThemeShine,
Width: "100%",
},
),
charts.WithTooltipOpts(opts.Tooltip{Show: true}),
)
pieItems := make([]opts.PieData, 0)
for _, v := range c {
pieItems = append(pieItems, opts.PieData{Name: v.Name, Value: v.Amount})
}
pie.AddSeries("committer", pieItems)
return pie
}
func plotIssueStack(is parse.IssueStack) *charts.Line {
line := charts.NewLine()
line.SetGlobalOptions(
charts.WithInitializationOpts(
opts.Initialization{
Theme: types.ThemeShine,
Width: "100%",
},
),
charts.WithTooltipOpts(
opts.Tooltip{Show: true},
),
)
lineAxis := util.GetSortedKeyByKey(is)
var lineValue []opts.LineData
for _, v := range lineAxis {
lineValue = append(lineValue, opts.LineData{Value: is[v]})
}
line.SetXAxis(lineAxis).AddSeries("Category", lineValue).
SetSeriesOptions(
charts.WithAreaStyleOpts(
opts.AreaStyle{
Opacity: 0.2,
},
),
charts.WithLineChartOpts(
opts.LineChart{
Smooth: true,
},
),
)
return line
}
func MakeCharts(r parse.Insight) Charts {
return Charts{
ChartActivitiesBar: plotDailyCommits(r.DailyCommits, r.Author),
ChartCommittersPie: plotCommittersPie(r.Committers),
ChartLanguagePie: plotRepoLang(r.Languages),
ChartIssueStack: plotIssueStack(r.IssueStack),
}
}