pygal + гистограмма + изменение цвета значений в пределах одной серии в зависимости от x_label - PullRequest
0 голосов
/ 19 февраля 2020

weekdays values

Привет, люди.

Я хотел бы использовать pygal для построения изображения, как показано на рисунке выше:

Построение одной и той же серии с разными цвета на основе x_label. По сути, я хотел бы показать разницу между рабочими днями и выходными.

Однако кажется, что pygal разрешает настройки цвета только для серии.

То, что мне удалось сделать sh пока одно из следующего:

1 - рассматривать каждый день недели как свою собственную серию, со своим собственным цветом, без отображения x_lables. weekdays shown,no x_labels 7 color

код:

import pygal
from pygal.style import Style

y_values = [12.85, 12.78, 13.74, 16.73, 12.52, 3.71, 1.96]
x_labels = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]
filename = 'barchar_test.png'


chart_config = {
    "human_readable": True,
    "pretty_print": True,
    "truncate_legend": -1,
    "value_font_size": 15,
    "print_values": True,
    "show_legend": False,
    "print_values_position": "top",
    "print_labels": True,
    "value_formatter": lambda x: "{0: .2f}".format(x),
}
style_config = {
    "font_family": "googlefont:lato",
    "plot_background": "white",
    "value_font_size": 15,
    "show_y_guides": False,
    "show_y_labels": False,
    "colors": ("#0099d6", "#0099d6", "#0099d6", "#0099d6", "#0099d6", "#6d6f71", "#6d6f71"),
}

def _plot_bar_chart(y_values, x_labels, filename):
    bar_chart = pygal.Bar(style=Style(**style_config), **chart_config)
    for i, item in enumerate(y_values):
        bar_chart.add(
            x_labels[i], {item},
        )
    bar_chart.render_to_png(filename)

_plot_bar_chart(y_values, x_labels, filename)

2 - считать значения одной серией, отображая x_labels, но только одним цветом: weekdays shown, one color код:

    dimport pygal
from pygal.style import Style

y_values = [12.85, 12.78, 13.74, 16.73, 12.52, 3.71, 1.96]
x_labels = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]
filename = 'barchar_test.png'


chart_config = {
    "human_readable": True,
    "pretty_print": True,
    "truncate_legend": -1,
    "value_font_size": 15,
    "print_values": True,
    "show_legend": False,
    "print_values_position": "top",
    "print_labels": True,
    "value_formatter": lambda x: "{0: .2f}".format(x),
}
style_config = {
    "font_family": "googlefont:lato",
    "plot_background": "white",
    "value_font_size": 15,
    "show_y_guides": False,
    "show_y_labels": False,
    "colors": ("#0099d6", "#0099d6", "#0099d6", "#0099d6", "#0099d6", "#6d6f71", "#6d6f71"),
}

def _plot_bar_chart(y_values, x_labels, filename):
    bar_chart = pygal.Bar(style=Style(**style_config), **chart_config)
    bar_chart.x_labels = x_labels
    bar_chart.add('', y_values)
    bar_chart.render_to_png(filename)

_plot_bar_chart(y_values, x_labels, filename)

3- Рассмотрите значения как отдельные серии, покажите x_labels, но все столбцы должны быть сложены в первом x_label: weekdays shown,x_labels 7 color

код:

import pygal
from pygal.style import Style

y_values = [12.85, 12.78, 13.74, 16.73, 12.52, 3.71, 1.96]
x_labels = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]
filename = 'barchar_test.png'


chart_config = {
    "human_readable": True,
    "pretty_print": True,
    "truncate_legend": -1,
    "value_font_size": 15,
    "print_values": True,
    "show_legend": False,
    "print_values_position": "top",
    "print_labels": True,
    "value_formatter": lambda x: "{0: .2f}".format(x),
}
style_config = {
    "font_family": "googlefont:lato",
    "plot_background": "white",
    "value_font_size": 15,
    "show_y_guides": False,
    "show_y_labels": False,
    "colors": ("#0099d6", "#0099d6", "#0099d6", "#0099d6", "#0099d6", "#6d6f71", "#6d6f71"),
}

def _plot_bar_chart(y_values, x_labels, filename):
    bar_chart = pygal.Bar(style=Style(**style_config), **chart_config)
    bar_chart.x_labels = x_labels
    for i, item in enumerate(y_values):
        bar_chart.add(
            x_labels[i], {item},
        )
    bar_chart.render_to_png(filename)

_plot_bar_chart(y_values, x_labels, filename)

Любые мысли о это?

Спасибо:)

...