BarChart
是Manim库中用于创建条形图的函数。它允许用户通过一组值创建一个条形图,其参数可以调整条形的外观和布局。
BarChart(values, bar_names=None, y_range=None, x_length=None,
y_length=None, bar_colors=['#003f5c', '#58508d', '#bc5090', '#ff6361', '#ffa600'],
bar_width=0.6, bar_fill_opacity=0.7, bar_stroke_width=3, **kwargs)[source]
以下是函数及其参数的详细解释:
参数解释:
-
values:
- 类型: 列表
- 描述: 条形图每个条形的高度(或长度)的数值列表。
-
bar_names:
- 类型: 列表 (可选)
- 描述: 条形的名称列表,如果提供,会显示在相应的条形下方。
-
y_range:
- 类型: 元组 (可选)
- 描述: y轴的范围,格式为
(y_min, y_max)
,用于设置条形的最大和最小值。
-
x_length:
- 类型: 浮点数 (可选)
- 描述: 条形图在水平方向上的长度。
-
y_length:
- 类型: 浮点数 (可选)
- 描述: 条形图在垂直方向上的长度。
-
bar_colors:
- 类型: 列表 (可选)
- 描述: 条形的颜色列表,可以为每个条形设置不同的颜色。
-
bar_width:
- 类型: 浮点数 (可选)
- 描述: 每个条形的宽度。
-
bar_fill_opacity:
- 类型: 浮点数 (可选)
- 描述: 条形填充的透明度,范围是0到1。
-
bar_stroke_width:
- 类型: 整数 (可选)
- 描述: 条形边框的宽度。
-
kwargs:
- 描述: 额外的可选参数,可以传递给基类的构造函数。
示例代码1:
以下是一个使用BarChart
创建简单条形图的代码示例:
from manim import *
class BarChartExample113(Scene):
def construct(self):
# 数据值和对应名称
values = [3, 5, -2, 4] # 条形的高度对应的数值
bar_names = ["A", "B", "C", "D"] # 条形的名称
# 创建条形图
bar_chart = BarChart(
values, # 条形的高度
bar_names=bar_names, # 条形的名称
y_range=(0, 6), # y 轴的范围
x_length=6, # x 轴的长度
y_length=4, # y 轴的长度
bar_colors=['#003f5c', '#58508d', '#bc5090', '#ff6361'], # 条形的颜色
bar_width=0.5, # 条形的宽度
bar_fill_opacity=0.8, # 条形的填充透明度
bar_stroke_width=2 # 条形边框的宽度
)
c_bar_lbls = bar_chart.get_bar_labels(font_size=48)
# 添加条形图到场景
self.add(bar_chart,c_bar_lbls) # 动画展示条形图的创建
运行结果:
示例2:
class BarChartExample112(Scene):
def construct(self):
chart = BarChart(
values=[-5, 40, -1, 20, -13,17.8],
bar_names=["one", "two", "three", "four", "five","six"],
y_range=[-20, 50, 10],
y_length=6,
x_length=10,
x_axis_config={"font_size": 36},
)
c_bar_lbls = chart.get_bar_labels(font_size=48)
self.add(chart, c_bar_lbls)
运行结果:
示例3:
from manim import *
class ChangeBarValuesExample(Scene):
def construct(self):
# 定义一组值,这些值将用于创建条形图
values = [-10, -8, -6, -4, -2, 0, 2, 4, 6, 8, 10]
# 创建条形图
chart = BarChart(
values, # 提供的值用于条形的高度
y_range=[-10, 10, 2], # y 轴的范围,最小值为 -10,最大值为 10,间隔为 2
y_axis_config={"font_size": 24}, # y 轴的字体大小设置为 24
)
# 将条形图添加到场景中
self.add(chart)
# 更新条形图中的值,使用原值的反向列表
chart.change_bar_values(list(reversed(values)))
# 获取条形图的标签并添加到场景中,标签的字体大小设置为 24
self.add(chart.get_bar_labels(font_size=24))
函数解释
函数解释
-
类定义:
ChangeBarValuesExample(Scene)
是一个继承自Scene
的类,用于定义一个场景中将如何展示条形图。
-
construct 方法:
construct(self)
是Scene
类中的一个方法,用于定义场景的构造过程。
-
数据定义:
values = [-10, -8, -6, -4, -2, 0, 2, 4, 6, 8, 10]
:这段代码定义了一组整数值,代表条形图的高度。
-
创建条形图:
chart = BarChart(...)
:创建一个条形图对象。参数包括:values
:用于生成条形图的高度。y_range
:设置 y 轴的范围和刻度。y_axis_config
:指定 y 轴的字体大小。
-
添加条形图到场景:
self.add(chart)
:将创建的条形图添加到场景中,以供渲染。
-
修改条形图的值:
chart.change_bar_values(list(reversed(values)))
:将条形图中柱子的高度更改为原列表的反向顺序。list(reversed(values))
会生成一个新列表,其中的值是values
列表的反向顺序。
-
添加条形图标签:
self.add(chart.get_bar_labels(font_size=24))
:获取条形图的标签并设置字体大小为 24,然后将这些标签添加到场景中,便于查看每个条形的具体数值。
运行结果:
示例4:
from manim import *
class GetBarLabelsExample(Scene):
def construct(self):
# 创建一个条形图,值从 10 到 1,y 轴范围从 0 到 10
chart = BarChart(values=[10, 9, 8, 7, 6, 5, 4, 3, 2, 1], y_range=[0, 10, 1])
# 获取条形图的标签
c_bar_lbls = chart.get_bar_labels(
color=WHITE, # 标签的颜色设为白色
label_constructor=MathTex, # 标签的构造方法使用 MathTex,用于渲染数学公式
font_size=36 # 标签的字体大小设为 36
)
# 将条形图和标签添加到场景中
self.add(chart, c_bar_lbls)
运行结果:
关键函数:
get_bar_labels(color=None, font_size=24, buff=0.25, label_constructor=<class
'manim.mobject.text.tex_mobject.Tex'>)[source]
get_bar_labels
是 Manim 中 BarChart
类的方法,用于获取条形图的标签。以下是对该函数参数的详细解释:
get_bar_labels(color=None, font_size=24, buff=0.25,
label_constructor=<class 'manim.mobject.text.tex_mobject.Tex'>)
参数解释
-
color
:- 类型:颜色(Color)
- 默认值:
None
- 作用:设置标签的颜色。如果未指定,标签颜色将使用默认值。如果想要自定义颜色,可以传递一个有效的颜色对象。
-
font_size
:- 类型:整数(int)
- 默认值:
24
- 作用:设置标签的字体大小。可以调整此值以根据需要改变标签的显示大小。
-
buff
:- 类型:浮点数(float)
- 默认值:
0.25
- 作用:设置标签与条形图顶部之间的间距(缓冲距离)。这个值决定了标签与相应条形的垂直距离,增加该值会将标签向上移动,减小该值则会将标签拉近。
-
label_constructor
:- 类型:类(class)
- 默认值:
<class 'manim.mobject.text.tex_mobject.Tex'>
- 作用:指定用于创建标签的构造方法。可以自定义使用不同的文本或数学文本类。例如,通常使用
MathTex
来渲染带有数学公式的标签,使用Tex
来渲染普通文本。
函数返回值
该函数返回一个包含所有条形图标签的 Mobject(对象)。每个标签的位置对应于其相应条形的顶部,在视觉上它们将显示于条形图的柱子上方。