如何使用最小比例 python pygal

How to use min scale python pygal

所以我想要我的 pygal 图中的 y 轴变量之间的整数间隔。这是我的代码:

    graph = pygal.Line(min_scale=1,x_label_rotation=35, truncate_label=-1, no_data_text="", style=custom_style, width=1000, height=400, explicit_size=True)
    x_labels = []
    data = []
    for i in range(1,len(User.query.all())+1):
        data.append(i)
        x_labels.append(User.query.filter_by(id=i).first().date_created)
    graph.x_labels = x_labels
    graph.add("Count", data)

没关系 User.query 自 .date_created returns 日期时间以来的东西。 不管怎样这个图returns这个

我希望 y 间隔先是 1,然后是 2,所以我不需要任何小数

您可以通过设置图表对象的 y_labels 属性来指定 y 刻度的位置。

例如:

graph = pygal.Line(min_scale=1, width=400, height=300)
graph.add("Count", [1, 1.5, 2])
graph.x_labels = ["A", "B", "C"]
graph.y_labels = [1, 2]

生成以下图表:

请参阅 docs 查看各种选项。

Pygal 似乎不支持这个。我给了它整数值,但它会在 1 和 2 之间画出十几条水平线和小数值。设置 min_scalemax_scaleorder_min(所有选项似乎远程相关)不要帮不上忙唯一的解决方案是使用 mostlyoxygen 回答的内容:明确指定哪些值应出现在轴上。不过,我想出了一个不错的片段,可以很容易地创建该列表:

chart.y_labels = list(range(max_y_value + 1))
  • 它需要 +1 因为范围是独占的(range(3) 生成 [0,1,2])。
  • 注意 max_y_value 必须是 int 类型,例如即使 round() 的结果是一个浮点数,并且在传递给 range 函数时会抛出错误。如果适用,您可以使用 int(max_y_value),尽管在您可能想要四舍五入时会丢弃任何小数(有效地向下舍入)。
  • 如果您不希望图表从零开始(但请注意,您可能会以这种方式制作误导性图表,因为即使值相当稳定也会夸大差异),您可以传递第一个值到最大值之前的 range 函数。