NDOJ/judge/utils/stats.py
2023-05-20 08:54:17 +09:00

98 lines
2.5 KiB
Python
Executable file

from operator import itemgetter
__all__ = ("chart_colors", "highlight_colors", "get_pie_chart", "get_bar_chart")
chart_colors = [
0x3366CC,
0xDC3912,
0xFF9900,
0x109618,
0x990099,
0x3B3EAC,
0x0099C6,
0xDD4477,
0x66AA00,
0xB82E2E,
0x316395,
0x994499,
0x22AA99,
0xAAAA11,
0x6633CC,
0xE67300,
0x8B0707,
0x329262,
0x5574A6,
0x3B3EAC,
]
highlight_colors = []
def _highlight_colors():
for color in chart_colors:
r, g, b = color >> 16, (color >> 8) & 0xFF, color & 0xFF
highlight_colors.append(
"#%02X%02X%02X"
% (min(int(r * 1.2), 255), min(int(g * 1.2), 255), min(int(b * 1.2), 255))
)
_highlight_colors()
chart_colors = list(map("#%06X".__mod__, chart_colors))
def get_pie_chart(data):
return {
"labels": list(map(itemgetter(0), data)),
"datasets": [
{
"backgroundColor": chart_colors,
"highlightBackgroundColor": highlight_colors,
"data": list(map(itemgetter(1), data)),
},
],
}
def get_bar_chart(data, **kwargs):
return {
"labels": list(map(itemgetter(0), data)),
"datasets": [
{
"backgroundColor": kwargs.get("fillColor", "rgba(151,187,205,0.5)"),
"borderColor": kwargs.get("strokeColor", "rgba(151,187,205,0.8)"),
"borderWidth": 1,
"hoverBackgroundColor": kwargs.get(
"highlightFill", "rgba(151,187,205,0.75)"
),
"hoverBorderColor": kwargs.get(
"highlightStroke", "rgba(151,187,205,1)"
),
"data": list(map(itemgetter(1), data)),
},
],
}
def get_histogram(data, **kwargs):
return {
"labels": [round(i, 1) for i in list(map(itemgetter(0), data))],
"datasets": [
{
"backgroundColor": kwargs.get("fillColor", "rgba(151,187,205,0.5)"),
"borderColor": kwargs.get("strokeColor", "rgba(151,187,205,0.8)"),
"borderWidth": 1,
"hoverBackgroundColor": kwargs.get(
"highlightFill", "rgba(151,187,205,0.75)"
),
"hoverBorderColor": kwargs.get(
"highlightStroke", "rgba(151,187,205,1)"
),
"data": list(map(itemgetter(1), data)),
},
],
}