用Manim创建条形图【BarChart】
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(对象)。每个标签的位置对应于其相应条形的顶部,在视觉上它们将显示于条形图的柱子上方。
相关文章:
用Manim创建条形图【BarChart】
BarChart是Manim库中用于创建条形图的函数。它允许用户通过一组值创建一个条形图,其参数可以调整条形的外观和布局。 BarChart(values, bar_namesNone, y_rangeNone, x_lengthNone, y_lengthNone, bar_colors[#003f5c, #58508d, #bc5090, #ff6361, #ffa600],bar_w…...
iMES工厂管家:强大的工厂管理系统
iMES工厂管家:强大的工厂管理系统 在现代工厂管理中,iMES工厂管家作为一款功能强大的MES系统,为用户提供了全面的管理解决方案。本文将介绍iMES工厂管家的基本信息、特点、以及如何快速部署和使用。 软件简介 iMES工厂管家是一款基于.NetCor…...
iOS ------ 事件响应链
响应者链 响应者链是由一系列链接在一起的响应者(UIResponser之类:UIApplication,UIViewController,UIView)注组成的。一般情况下,一条响应链开始于第一响应者,结束于application对象。如果一个…...
Go 语言 switch 语句的特点
在 Go 语言中,switch 语句设计得更加简洁和直观,因此不需要显式使用 break 语句来终止一个分支。这种设计决策源于 Go 语言的一些设计哲学和目标,主要包括: 自动终止: Go 语言的 switch 语句会在每个 case 执行完成后自…...
【递归】什么是递归-C语言为例
递归是指一个函数在其定义中直接或间接调用自身的编程技巧。在C语言中,递归常用于解决可以被分解为更小的子问题的问题。递归函数通常由两个主要部分组成: 基准情况:这是递归停止的条件,通常是最简单的情况。 递归情况࿱…...
vue针对低版本浏览器不兼容es6特性解决方案,
browser.min.js 解决ES6兼容IE browser.min.js,polyfill.min.js vue针对安卓低版本、ios9 不兼容 es6特性解决方案 解决IE9无法使用promise的js脚本,引入后,还需跟browser.js配合使用 Babel 默认只转换新的 JavaScript 句法,po…...
嵌入式内存管理高频面试题及参考答案(4万字长文)
目录 嵌入式系统中内存管理的重要性 嵌入式系统中的内存主要分为哪几类? 静态内存分配和动态内存分配的特点 内存对齐的概念及其作用 嵌入式系统中为什么需要关注内存碎片问题 内存分区的概念及其在嵌入式系统中的应用 内存映射文件的概念及其在嵌入式系统中的作用 虚…...
TinyWebserver的复现与改进(2):项目的整体框架
上文我们成功运行了代码,本文我们将对项目的整体流程作一下讲解 如果你之前没做过相关的内容,对服务器的⾼并发模型也⼀⽆所知,不建议继续做下去,需要的前置知识有: Linux的基本命令(⭐)多进程…...
R 语言学习教程,从入门到精通,R 字符串(10)
1、R 字符串 R 语言字符串可以使用一对单引号 ’ ’ 或一对双引号 " " 来表示。 单引号字符串中可以包含双引号。 单引号字符串中不可以包含单引号。 双引号字符串中可以包含单引号。 双引号字符串中不可以包含双引号。 以下示例演示来字符串的使用: a …...
QT 简易音乐播放器
目录 放置控件 获取mp3文件 播放音乐 准备工作 加载模块 加载头文件 new一个output对象,Mediaplayer对象 把outpout对象交给mediaplayer对象 给播放器设置音乐 播放 优化 上一曲下一曲功能 双击歌曲播放 获取音乐时长和音乐播放时间 让音乐进度条跟随音乐走 调…...
代码随想录八股训练营day32
代码随想录八股训练营day32 1、synchronized和lock的区别是什么 (1)synchronized和lock的区别是什么 synchronized和Lock都是Java中用于实现线程同步的手段,synchronized是Java的关键字,基于JVM的内置锁实现,可以用于…...
11.面试题——消息队列RabbitMQ
1.RabbitMQ是什么?特点是什么? RabbitMQ是一种开源的消息队列中间件,用于在应用程序之间进行可靠的消息传递。它实现了AMQP(Advanced Message Queuing Protocol)协议,提供了强大的消息处理能力。RabbitMQ的…...
MySQL运维-日志
错误日志 二进制日志 介绍 日志格式 日志查看 日志删除 查询日志 慢查询日志...
synchronized重量级锁的实现原理是怎样的
重量级锁(Heavyweight Locking)是 Java 中 synchronized 关键字的锁机制的一部分,用于在高竞争情况下确保线程的同步。重量级锁主要通过操作系统的线程同步机制实现,通常涉及阻塞线程、上下文切换等开销较大的操作。以下是重量级锁…...
探索 GLTF 的世界:3D 内容的未来
在 3D 内容创作领域,GLTF 正在掀起波澜,成为跨不同平台提供丰富互动体验的未来标准。GL 传输格式 (GLTF) 由 Khronos Group 开发,是一种用于在工具和服务之间传输 3D 模型和场景的开放标准。它设计紧凑、高效且易于集成…...
【深度学习】【语音】TTS, CM-TTS,TTS扩散模型,论文
CM-TTS: Enhancing Real Time Text-to-Speech Synthesis Efficiencythrough Weighted Samplers and Consistency Models CM-TTS: 提高实时文本到语音合成效率 通过加权采样器和一致性模型 Xiang Li 1, Fan Bu 1, Ambuj Mehrish 2, Yingting Li 1, Jiale Han 1, Bo Cheng 1, S…...
【网络协议】网络劫持 - ARP_DNS欺骗篇
前言 网络劫持是一种网络攻击技术,攻击者通过拦截、篡改或重定向数据流量,控制用户的网络通信路径,干扰正常的网络服务。其方式可能包括DNS劫持、ARP欺骗和HTTP劫持等。通过这些手段,攻击者可以窃取敏感信息如个人身份数据和财务信…...
Linux 系统框架分析(一)
一、linux内核结构框图 对内核结构框图有个总体的把握,有助于理解为什么驱动要这样写,为什么写的应用程序所用的C库接口能够产生这么多的事情。 框图可以看出来,linux系统,包括五个系统 一、Linux内核结构介绍 Linux 内核是操作…...
Leetcode 剑指 Offer II 090.打家劫舍 II
题目难度: 中等 原题链接 今天继续更新 Leetcode 的剑指 Offer(专项突击版)系列, 大家在公众号 算法精选 里回复 剑指offer2 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 一个专业的小偷,计划偷窃一个环形街道上沿街的房屋&a…...
上海冷链配送新篇章 华鼎冷链科技以卓越服务餐饮品牌
在快速发展的上海餐饮连锁行业中,冷链运输作为保障食品安全与品质的关键环节,正迎来前所未有的发展机遇与挑战。华鼎冷链科技作为该领域的佼佼者,正引领着上海乃至全国冷链运输行业的新风尚。 华鼎冷链科技的成功并非一蹴而就。首先ÿ…...
华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
