Python绘图库及图像类型之特殊领域可视化

Python绘图库及图像类型之基础图表-CSDN博客https://blog.csdn.net/weixin_64066303/article/details/148433762?spm=1001.2014.3001.5501

Python绘图库及图像类型之高级可视化-CSDN博客https://blog.csdn.net/weixin_64066303/article/details/148450750?spm=1001.2014.3001.5501

金融图表(mplfinance)

Python 金融交易实用指南(二)-CSDN博客https://blog.csdn.net/wizardforcel/article/details/145290751

Python mplfinance库:金融数据可视化-CSDN博客https://blog.csdn.net/GitHub_miao/article/details/140624948

类别作用描述典型实现场景
核心作用
价格走势可视化绘制K线图/美国线清晰展示开盘价、收盘价、最高价、最低价股票日内波动分析、加密货币行情跟踪、期货合约价格监控
技术指标集成叠加MACD/RSI/布林带等指标,辅助量化交易决策量化策略回测、交易信号触发点识别、超买超卖区域判断
成交量分析结合价格与成交量柱状图,验证市场趋势强度突破行情量能确认、机构资金动向追踪、异常交易量预警
模式识别可视化经典形态(头肩顶/三角形整理等)技术分析师教学、历史行情形态回溯、趋势反转预判
多周期对比并排显示不同时间粒度图表(日线/周线/分钟线)短线交易与长线投资策略协同、市场结构多尺度观察
应用领域
证券投资分析跟踪个股/指数技术面变化选股策略执行、板块轮动监测、支撑阻力位识别
量化交易为算法交易提供可视化验证界面高频策略优化、统计套利信号可视化、回测结果图表输出
投资教育直观演示金融概念与技术工具交易培训课件、财经课程案例、模拟交易平台图表组件
风险管理识别价格异常波动与关键位突破止损点设置依据、黑天鹅事件行情记录、波动率骤增预警
财经媒体生成专业行情图表用于市场解读财经新闻插图、研报技术分析部分、直播节目实时图表
技术优势
数据兼容性直接处理pandas.DataFrame(列名需含Open/High/Low/Close/Volume对接Yahoo Finance/聚宽/AkShare等数据源,无需格式转换
高效绘图基于Matplotlib优化金融数据渲染速度快速生成10年以上历史K线图、实时行情仪表盘批量更新
样式定制支持50+内置风格(如binance/yahoo)或自定义颜色深色模式交易界面、品牌色系适配、多图表风格统一
扩展功能添加自定义图形(趋势线/斐波那契回调)、事件标记(财报发布/政策出台)标注关键基本面事件、手动绘制技术形态、策略特殊信号标记
输出灵活性导出PNG/SVG/PDF或嵌入Jupyter/GUI应用自动化日报生成、量化报告附录、交易系统内置图表模块
图表类型适用场景可视化要素
日本蜡烛图主流技术分析(趋势/反转信号)实体颜色(红跌绿涨)、影线长度(波动幅度)
美国线(OHLC)简化价格波动观察(密集交易时段)水平短线=开盘收盘价,竖线=高低价范围
Renko图过滤噪音专注趋势砖块大小=固定价格变动,忽略时间维度
点数图识别关键支撑阻力位X/O列表示涨跌,每列高度=价格变动单位

绘图库介绍

函数签名(Function Signature)

# mpf.make_marketcolors() 是 mplfinance 库中用于自定义 K 线图颜色方案的核心函数。
# 通过它可以灵活控制阳线/阴线、影线、边缘、成交量等元素的颜色。
mpf.make_marketcolors(up='',               # 阳线颜色down='',             # 阴线颜色edge='',             # K 线边缘颜色wick='',             # 影线颜色volume='',           # 成交量颜色inherit=False,       # 是否继承颜色alpha=1.0,           # 透明度ohlc='',             # OHLC 线颜色**kwargs
)

关键参数详解

参数类型默认值说明
upstr 或 tuple'k'阳线(收盘价 ≥ 开盘价)的颜色,支持颜色名称或 RGB 元组(如 '#00FF00'
downstr 或 tuple'k'阴线(收盘价 < 开盘价)的颜色
edgestr 或 'inherit''k'K 线边缘颜色。设为 'inherit' 时继承实体颜色(up/down
wickstr 或 'inherit''k'影线颜色。设为 'inherit' 时继承实体颜色
volumestr/dict/'inherit''k'成交量颜色:
- 单色:所有成交量统一颜色
- 字典:{'up':'red', 'down':'green'}
'inherit':继承 K 线颜色
inheritboolFalse全局继承开关。为 True 时,edge 和 wick 默认继承实体颜色
alphafloat1.0颜色透明度(0.0 透明 ~ 1.0 不透明)
ohlcstr 或 dictNoneOHLC 线图颜色(需配合 type='ohlc'
kwargs--备用参数(通常无需使用)
字母颜色英文名称
'b'蓝色blue
'g'绿色green
'r'红色red
'c'青色cyan
'm'品红色magenta
'y'黄色yellow
'k'黑色k black
'w'白色white

 示例代码

import pandas as pd
import numpy as np
import mplfinance as mpf
import matplotlib.dates as mdates
from datetime import datetime
import matplotlib.pyplot as plt# 生成示例金融数据(日期范围:2025年1月)
dates = pd.date_range(start="2025-01-01", end="2025-01-31", freq="D")
data = {"Open": np.random.uniform(100, 105, len(dates)),"High": np.random.uniform(106, 110, len(dates)),"Low": np.random.uniform(95, 99, len(dates)),"Close": np.random.uniform(101, 107, len(dates)),"Volume": np.random.randint(1000, 5000, len(dates))
}
df = pd.DataFrame(data, index=dates)# 创建注释内容(关键日期和事件)
annotations = [(datetime(2025, 1, 8),  # 日期df.loc["2025-01-08", "High"] + 1,  # 价格位置"突破阻力位",  # 注释文本{"arrowstyle": "->", "color": "blue"}),  # 箭头样式(datetime(2025, 1, 15),df.loc["2025-01-15", "Low"] - 1,"支撑位测试\n成交量放大",{"arrowstyle": "->", "color": "red"}),(datetime(2025, 1, 25),df.loc["2025-01-25", "Close"],"MACD金叉\n买入信号",{"arrowstyle": "fancy", "color": "green"})
]# 创建自定义绘图对象
apds = [# 添加移动平均线mpf.make_addplot(df["Close"].rolling(5).mean(), color="orange", width=1.5),mpf.make_addplot(df["Close"].rolling(10).mean(), color="purple", width=1.5),# 添加交易量mpf.make_addplot(df["Volume"], panel=1, type="bar", color="skyblue", ylabel="Volume")
]# 创建绘图样式
style = mpf.make_marketcolors(up="#2E7D32",  # 上涨K线颜色down="#D32F2F",  # 下跌K线颜色wick={"up": "#2E7D32", "down": "#D32F2F"},  # 影线颜色edge="inherit",  # 边缘颜色volume="skyblue",  # 交易量颜色
)
mpf_style = mpf.make_mpf_style(marketcolors=style,gridstyle="--",  # 网格线样式gridcolor="lightgray",rc={"font.family": "Microsoft YaHei"}  # 中文字体支持
)# 创建绘图并添加注释
fig, axlist = mpf.plot(df,type="candle",  # K线类型title="股票分析 (2025年1月)",ylabel="价格 ($)",style=mpf_style,addplot=apds,volume=True,  # 显示成交量figratio=(12, 6),  # 图形比例figscale=1.2,  # 缩放比例returnfig=True  # 返回fig和axes对象用于添加注释
)# 添加文本注释
for date, price, text, arrowprops in annotations:# 转换日期格式date_num = mdates.date2num(date)# 在主图添加注释ax = axlist[0]  # 主图是第一个axesax.annotate(text,xy=(date_num, price),xytext=(date_num + 1, price + 3),arrowprops=arrowprops,fontsize=10,bbox=dict(boxstyle="round,pad=0.3", fc="wheat", alpha=0.8))# 添加技术指标标签
axlist[0].text(0.02, 0.95,  # 相对坐标位置 (左下角为0,0)"MA5: 橙色\nMA10: 紫色",transform=axlist[0].transAxes,fontsize=9,bbox=dict(facecolor="white", alpha=0.7)
)# 添加图例
axlist[0].legend(["5日均线", "10日均线"], loc="upper left")# 保存高清图片 (支持PNG/PDF/SVG等格式)
fig.savefig("financial_chart.png", dpi=300, bbox_inches="tight")
print("图表已保存为 financial_chart.png")# 显示图表
plt.show()

科学可视化(Mayavi)

Python库 - Mayavi_python mayavi-CSDN博客https://blog.csdn.net/qq_52964132/article/details/143329832

类别作用描述典型实现场景
核心作用
三维数据可视化将复杂科学数据(标量、矢量、张量)转换为直观的三维图形流体动力学模拟结果、医学影像(CT/MRI)、分子结构建模、地质勘探数据
交互式分析支持旋转、缩放、剖面切割等交互操作,辅助数据探索工程师分析CFD流场特性、研究人员观察蛋白质3D结构
高质量渲染提供光照、透明度、纹理等渲染效果,增强视觉表现力学术论文配图、项目汇报可视化展示、科学宣传材料制作
流场可视化专长于矢量/张量场可视化(如流线、粒子轨迹)飞机气动分析、燃烧模拟、天气预报风场可视化
应用领域
计算流体动力学 (CFD)展示压力场、速度场、涡量分布等复杂流体现象ANSYS Fluent/OpenFOAM 结果可视化、湍流模拟分析
医学成像三维重建CT/MRI数据,多平面切割观察解剖结构手术规划、病灶体积测量、医学教学演示
地球科学可视化地质层、地震波传播、气象数据等空间信息石油勘探地震数据处理、气候模型输出分析、地形地貌渲染
材料科学与化学展示分子轨道、电子密度、晶体结构等微观模型量子化学计算(VASP/Gaussian)结果可视化、纳米材料结构分析
电磁场仿真呈现电场/磁场分布、辐射方向图等电磁特性天线设计优化、微波器件仿真结果分析
技术实现特点
开发语言基于 Python 的API,无缝集成科学计算生态(NumPy/SciPy)在Jupyter Notebook中交互式绘图,与Pandas/Matplotlib协同工作
底层引擎使用 VTK(Visualization Toolkit)进行高性能渲染处理超大规模体数据(>1GB 的有限元网格)
部署方式支持桌面应用(mlab交互窗口)和Web嵌入(mpld3/Panel扩展)本地调试+服务器端批量生成科学报告
扩展性可通过自定义模块添加新数据源或过滤器连接实验设备实时数据流、适配专有文件格式

绘图库介绍

函数签名(Function Signature)

# mlab.figure 是 Mayavi 库中用于创建或激活图形窗口的核心函数,属于 mayavi.mlab 模块(用于快速绘图)。
mlab.figure(figure=None, bgcolor=None, fgcolor=None, engine=None, size=(400, 350),**kwargs
) -> mayavi.core.scene.Scene

参数详解

参数类型默认值说明
figurestrintScene 或 NoneNone图形标识
- 字符串:作为窗口标题,激活同名窗口或新建窗口
- 整数:激活对应 ID 的窗口
Scene 对象:直接激活该场景
None:创建新窗口(自动命名)
bgcolortuple 或 str(0.05, 0.05, 0.05)背景颜色
- RGB 元组(值域 [0, 1]),如 (1, 0, 0) 表示红色
- 颜色名称(如 'white''black'
fgcolortuple 或 str(1, 1, 1)前景颜色(坐标轴/文本颜色),格式同 bgcolor
engineEngine 对象None指定 Mayavi 引擎(通常无需设置)
sizetuple (width, height)(400, 350)窗口初始大小(像素)
**kwargs--其他传递给 Scene 类的参数(如 name 自定义窗口名)

返回值

  • 返回激活的 Scene 对象(Mayavi 场景),后续绘图操作将作用于此场景。

示例代码

import numpy as np
from mayavi import mlab
import os# 创建数据
x, y = np.mgrid[-3:3:100j, -3:3:100j]
z = np.sin(x**2 + y**2) * np.cos(2*x) * np.sin(2*y)# 创建Mayavi图形
mlab.figure(size=(1000, 800), bgcolor=(0.05, 0.05, 0.1))# 绘制3D曲面
surface = mlab.surf(x, y, z, colormap='viridis')
surface.actor.property.interpolation = 'phong'
surface.actor.property.specular = 0.3
surface.actor.property.specular_power = 30# 添加颜色条
colorbar = mlab.colorbar(surface, title='Z Value', orientation='vertical')
colorbar.label_text_property.color = (0.9, 0.9, 0.9)
colorbar.title_text_property.color = (0.9, 0.9, 0.9)
colorbar.scalar_bar_representation.position = [0.85, 0.1]# 添加注释 - 文本标签
mlab.text(0.4, 0.9, "3D Surface Plot", width=0.3, color=(1, 1, 1))
mlab.text(0.05, 0.85, "f(x,y) = sin(x² + y²) * cos(2x) * sin(2y)", width=0.5, color=(0.8, 0.8, 1))# 添加注释 - 点标记和说明
max_z = np.max(z)
min_z = np.min(z)
max_idx = np.argwhere(z == max_z)[0]
min_idx = np.argwhere(z == min_z)[0]# 添加坐标轴
mlab.axes(xlabel='X', ylabel='Y', zlabel='Z',color=(0.8, 0.8, 0.8),ranges=[-3, 3, -3, 3, -1, 1],nb_labels=5)# 添加图例说明
mlab.text(0.05, 0.05, "Created with Mayavi", width=0.25, color=(0.7, 0.7, 0.7))# 添加方向指示
mlab.orientation_axes()# 设置视角
mlab.view(azimuth=45, elevation=60, distance=8)# 确保保存目录存在
os.makedirs('output', exist_ok=True)# 保存图像
save_path = os.path.join('output', 'mayavi_visualization.png')
mlab.savefig(save_path, size=(1200, 900))
print(f"图像已保存至: {save_path}")# 显示图形
mlab.show()

词云(WordCloud)

python绘制词云图_python词云图-CSDN博客https://blog.csdn.net/2301_79959211/article/details/146580098

类别作用描述典型实现场景
核心作用
文本摘要快速提取高频关键词,直观展示文本核心主题分析用户评论焦点、总结会议纪要重点、提炼报告核心内容
语义权重可视化通过字号大小映射词汇重要性(词频/权重)展示政策文件关键词、研究论文术语分布、产品需求优先级
情感倾向呈现用颜色区分情感属性(如红=负面/绿=正面)社交媒体舆情分析、客户满意度调查、影评情感倾向
对比分析并排词云对比不同来源文本差异竞品用户评价对比、不同时期新闻热点演变、多版本政策修订差异
数据美学表达将枯燥文本转化为视觉冲击力强的艺术图形活动海报设计、书籍封面创作、数据艺术展品
应用领域
市场调研分析用户反馈关键词,洞察产品改进方向电商商品评论分析、APP应用商店评价挖掘、焦点小组访谈摘要
媒体与舆情监控捕捉新闻/社交媒体的热点话题趋势微博热搜话题可视化、突发事件报道关键词追踪、品牌声量监测
学术研究提炼文献高频术语,发现学科研究热点论文摘要关键词分析、学术会议主题挖掘、学科发展脉络探索
内容运营优化SEO关键词布局,指导内容创作方向博客主题规划、视频标签优化、广告文案关键词提取
教育评估可视化学生作答/作文的词汇特征考试开放题答案分析、写作能力评估、课堂讨论关键词统计
技术实现优势
多语言支持支持中/英/日/韩等语言分词(需搭配jieba/konlpy等库)跨境电商多国评论分析、国际文献研究、全球化品牌监测
高级定制自定义形状蒙版、渐变配色、字体风格企业LOGO形状词云(如用汽车轮廓分析车型评测)、品牌色系定制、节日主题设计
动态交互结合Plotly/D3.js生成可交互词云(悬停显示词频/上下文)数据看板集成、学术报告演示、实时舆情监控大屏
多数据源兼容处理文本/CSV/API数据流爬虫实时数据可视化、数据库评论导出分析、问卷系统直连
降噪能力过滤停用词(的/是/和等)、合并同义词、词干提取提升分析准确性,避免无意义词汇干扰

绘图库介绍

函数签名(Function Signature)

from wordcloud import WordCloud# wordcloud.generate 函数是 Python wordcloud 库的核心方法,用于根据输入文本生成词云。
# 创建 WordCloud 对象
wc = WordCloud(**params)# 生成词云
wc.generate(text)  # text 是待处理的字符串

关键参数详解 

参数说明示例值
widthheight图像宽高(像素)width=800, height=400
background_color背景颜色background_color="white"
max_words最多显示的词数量max_words=200
stopwords停用词集合(需提前分词)stopwords={"the", "and"}
font_path中文必备:字体文件路径(.ttf)font_path="msyh.ttc"
mask自定义形状(ndarray 或图像路径)mask=np.array(Image.open("mask.png"))
max_font_size最大字体尺寸max_font_size=60
collocations是否合并二元组(如 "new york")collocations=False

示例代码

import matplotlib.pyplot as plt
import matplotlib.patheffects as path_effects
import jieba  # 中文分词库
from wordcloud import WordCloud, STOPWORDS  # 现在应该能正常导入了# 设置中文字体支持
plt.rcParams['font.sans-serif'] = ['SimHei']  # Windows
# plt.rcParams['font.sans-serif'] = ['WenQuanYi Micro Hei']  # Linux
# plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']  # Mac
plt.rcParams['axes.unicode_minus'] = False# 1. 准备文本数据
text = """
Python是一种高级编程语言,由Guido van Rossum于1991年创建。
它以简洁明了的语法和强大的功能而闻名,广泛应用于Web开发、数据分析、
人工智能、科学计算和自动化脚本等领域。Python拥有庞大的标准库和活跃的
社区支持,使得开发者能够快速构建各种应用程序。其设计哲学强调代码可读性,
使用空格缩进来定义代码块,而不是使用大括号或关键字。
"""# 中文分词处理
def chinese_word_segmentation(text):seg_list = jieba.cut(text, cut_all=False)return " ".join(seg_list)# 对文本进行分词
segmented_text = chinese_word_segmentation(text)# 2. 准备停用词和自定义设置
stopwords = set(STOPWORDS)
stopwords.update(["能够", "使用", "各种", "拥有", "使得", "一种", "创建", "支持", "应用", "的", "是", "和", "而", "等"])  # 添加中文停用词# 3. 创建词云对象
try:# 尝试使用中文字体wordcloud = WordCloud(width=800,height=600,background_color='white',stopwords=stopwords,font_path='simhei.ttf',  # 指定中文字体路径max_words=100,contour_width=1,contour_color='steelblue',colormap='viridis')
except:# 如果字体文件不存在,使用默认字体wordcloud = WordCloud(width=800,height=600,background_color='white',stopwords=stopwords,max_words=100,contour_width=1,contour_color='steelblue',colormap='viridis')# 4. 生成词云
wordcloud.generate(segmented_text)# 5. 创建图形
plt.figure(figsize=(12, 8))# 显示词云
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')  # 隐藏坐标轴# 6. 添加主标题和注释
plt.title('Python编程语言分析', fontsize=24, pad=20, color='navy')# 添加文本框注释
text_box = plt.text(0.5,  # x位置 (0-1相对坐标)0.05, # y位置"词云特点:\n• 基于文本频率生成\n• 可自定义颜色和形状\n• 支持中文分词\n• 可添加停用词过滤",transform=plt.gcf().transFigure,  # 使用图形坐标ha='center',fontsize=14,bbox=dict(boxstyle='round,pad=0.5',facecolor='lightyellow',edgecolor='gold',alpha=0.8)
)# 添加文字效果
text_box.set_path_effects([path_effects.withStroke(linewidth=3, foreground='w')  # 白色描边
])# 添加箭头注释
plt.annotate('核心概念',xy=(0.65, 0.55),  # 箭头指向位置xytext=(0.3, 0.7),  # 文本位置arrowprops=dict(arrowstyle='fancy,tail_width=0.6',color='crimson',connectionstyle='arc3,rad=0.3',shrinkA=5),fontsize=16,color='darkred',bbox=dict(boxstyle='round4,pad=0.4', facecolor='#FFF8DC', edgecolor='orange')
)# 添加水印
plt.figtext(0.95, 0.02,'Generated by Python WordCloud',ha='right',fontsize=10,color='gray',alpha=0.7
)# 7. 保存图片
save_path = 'wordcloud_with_annotations.png'
plt.savefig(save_path,dpi=300,bbox_inches='tight',facecolor='white',pad_inches=0.5
)print(f"词云图片已保存至: {save_path}")# 显示图片(可选)
plt.tight_layout()
plt.show()

甘特图(Plotly)

甘特图(Gantt)python实现(matplotlib和plotly)_python 甘特图-CSDN博客https://blog.csdn.net/oyoli/article/details/135388314

类别作用描述典型实现场景
核心作用
时间规划可视化任务时间轴,明确起止日期、持续时间和里程碑节点项目启动前制定时间计划、研发阶段划分、产品上市倒计时规划
进度跟踪实时显示任务完成状态(计划 vs 实际进度)施工项目周报、软件开发迭代进度监控、活动筹备进度跟踪
资源协调识别任务并行/重叠情况,优化人力与设备资源分配团队任务负载均衡、共享设备调度冲突检测、多项目资源分配
依赖关系管理用箭头连接展示任务逻辑顺序(FS/SS/FF等依赖类型)工厂流水线工序优化、IT系统升级的先后依赖、科研实验步骤衔接
风险预警通过关键路径(Critical Path)标识高风险延迟任务识别可能影响总工期的瓶颈任务、提前触发应急预案
应用领域
工程项目管理管理建筑/基建项目阶段(设计→施工→验收)桥梁建设进度跟踪、厂房扩建工程监控、市政改造项目
软件开发协调敏捷开发冲刺(Sprint)、版本发布周期Jira任务可视化、版本迭代计划、Bug修复排期
产品研发控制产品从概念到量产的全流程汽车新车型开发、电子产品硬件迭代、药品临床试验阶段管理
营销活动策划统筹线上线下活动执行节点双十一促销筹备、新品发布会流程、广告投放时间线
学术研究规划课题研究阶段与论文撰写进度博士研究时间管理、合作课题分工、学术会议准备
Plotly 技术优势
交互性悬停显示任务详情、拖拽调整时间、点击筛选任务类型动态项目评审会演示、实时进度汇报
多平台支持生成可嵌入Web/PPT的HTML,支持Jupyter Notebook展示项目管理系统集成、在线仪表盘开发、自动化报告生成
高级定制自定义颜色(按负责人/状态)、进度条样式、时间缩放层级高管视图(关键任务聚焦)、团队视图(按成员着色)、风险视图(超期任务红色预警)
实时协作与数据库连接动态更新图表连接Asana/Trello API自动更新、团队共享实时看板
跨设备兼容响应式设计适配PC/平板/手机工地现场移动端查看、远程团队协作

绘图库介绍

函数签名(Function Signature)

# ff.create_gantt() 是 Plotly Figure Factory 模块中用于创建甘特图的函数。
ff.create_gantt(df,colors=None,index_col=None,show_colorbar=False,reverse_colors=False,title='Gantt Chart',bar_width=0.2,showgrid_x=False,showgrid_y=False,height=600,width=None,tasks=None,task_names=None,data=None,group_tasks=False,show_hover_fill=True
)

核心参数详解

参数类型默认值说明
dfDataFrame必填包含任务数据的 DataFrame,需有 TaskStartFinish 列
colorsdict/listNone自定义颜色:
dict{'Task1': 'rgb(0,0,255)', ...}
list: 按顺序指定颜色列表
index_colstrNone替代 Task 列作为任务名称的列名
show_colorbarboolFalse是否显示颜色条
titlestr'Gantt Chart'图表标题
bar_widthfloat0.2任务条的宽度(高度方向)
heightint600图表高度(像素)
widthintNone图表宽度(像素),默认自适应
group_tasksboolFalse是否按任务分组显示(需数据包含分组列)

 DataFrame df 必须包含以下列

  • Task: 任务名称(字符串)

  • Start: 任务开始时间(datetime 或日期字符串)

  • Finish: 任务结束时间(datetime 或日期字符串)

可选列:

  • Resource(或其他列): 用于颜色分组(需配合 colors 参数)

示例代码

barh

import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from datetime import datetime, timedelta
import numpy as np# 设置中文显示(如果注释需要中文)
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用黑体显示中文
plt.rcParams['axes.unicode_minus'] = False  # 正常显示负号# 示例数据:任务列表 (任务名, 开始时间, 持续时间(天))
tasks = [('需求分析', '2023-01-01', 5),('系统设计', '2023-01-06', 7),('编码实现', '2023-01-13', 10),('测试阶段', '2023-01-23', 8),('项目交付', '2023-02-01', 3)
]# 转换日期格式
start_dates = [datetime.strptime(task[1], '%Y-%m-%d') for task in tasks]
durations = [task[2] for task in tasks]
end_dates = [start + timedelta(days=dura) for start, dura in zip(start_dates, durations)]
task_names = [task[0] for task in tasks]# 创建图形
fig, ax = plt.subplots(figsize=(12, 8))# 绘制甘特图
y_pos = np.arange(len(tasks))
start_dates_num = mdates.date2num(start_dates)
ax.barh(y_pos, durations, left=start_dates_num, height=0.6, align='center',color=['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd'])# 设置y轴标签
ax.set_yticks(y_pos)
ax.set_yticklabels(task_names)
ax.invert_yaxis()  # 反转y轴使任务从上到下排列# 设置日期格式
date_format = mdates.DateFormatter('%Y-%m-%d')
ax.xaxis.set_major_formatter(date_format)
ax.xaxis.set_major_locator(mdates.WeekdayLocator(interval=1))
fig.autofmt_xdate()  # 自动旋转日期标签# 添加网格线
ax.grid(axis='x', linestyle='--', alpha=0.7)# 添加任务注释
for i, (start, end, duration) in enumerate(zip(start_dates, end_dates, durations)):# 在条形中间添加持续天数mid_point = start + timedelta(days=duration / 2)ax.text(mid_point, i, f'{duration}天',ha='center', va='center', color='white', fontweight='bold')# 在条形右侧添加结束日期ax.text(end + timedelta(days=0.5), i, f'结束:\n{end.strftime("%m/%d")}',ha='left', va='center', fontsize=9)# 添加特殊标记
ax.annotate('关键阶段',xy=(mdates.date2num(start_dates[2]), 2),xytext=(mdates.date2num(start_dates[2] - timedelta(days=5)), 1),arrowprops=dict(arrowstyle='->', color='red'),bbox=dict(boxstyle='round,pad=0.5', fc='yellow', alpha=0.5))# 添加图标题和坐标轴标签
plt.title('项目开发甘特图', fontsize=16, pad=20)
plt.xlabel('日期', fontsize=12)
plt.ylabel('任务', fontsize=12)# 调整布局
plt.tight_layout()# 保存图片(支持多种格式:png, jpg, pdf, svg等)
plt.savefig('project_gantt_chart.png', dpi=300, bbox_inches='tight')
print("甘特图已保存为 'project_gantt_chart.png'")# 显示图形
plt.show()

plotly

import plotly.express as px
import plotly.figure_factory as ff
import plotly.graph_objects as go
import pandas as pd
import os
from datetime import datetime
from plotly.io import to_image
import matplotlib.image as mpimg
import matplotlib.pyplot as plt
import io# 创建示例数据 - 项目任务计划
tasks = [dict(Task="项目启动", Start='2023-06-01', Finish='2023-06-05', Resource="管理", Completion=100),dict(Task="需求分析", Start='2023-06-03', Finish='2023-06-12', Resource="分析", Completion=100),dict(Task="系统设计", Start='2023-06-10', Finish='2023-06-20', Resource="设计", Completion=90),dict(Task="开发阶段", Start='2023-06-15', Finish='2023-07-10', Resource="开发", Completion=75),dict(Task="前端开发", Start='2023-06-15', Finish='2023-06-30', Resource="开发", Completion=100),dict(Task="后端开发", Start='2023-06-20', Finish='2023-07-10', Resource="开发", Completion=60),dict(Task="测试阶段", Start='2023-06-25', Finish='2023-07-15', Resource="测试", Completion=40),dict(Task="用户培训", Start='2023-07-05', Finish='2023-07-12', Resource="培训", Completion=20),dict(Task="上线部署", Start='2023-07-13', Finish='2023-07-15', Resource="运维", Completion=0),
]# 创建DataFrame
df = pd.DataFrame(tasks)# 将日期字符串转换为日期对象
df['Start'] = pd.to_datetime(df['Start'])
df['Finish'] = pd.to_datetime(df['Finish'])# 计算任务持续时间
df['Duration'] = (df['Finish'] - df['Start']).dt.days# 创建甘特图
# 修改第33行代码
fig = ff.create_gantt(df.to_dict('records'),  # 将DataFrame转换为字典列表colors=px.colors.qualitative.Pastel,index_col='Resource',show_colorbar=True,bar_width=0.4,showgrid_x=True,showgrid_y=True,group_tasks=True,title='项目开发计划甘特图'
)# 修改第50行代码(原循环部分)
for i, row in df.iterrows():# 计算任务中点位置mid_date = row['Start'] + (row['Finish'] - row['Start']) / 2# 添加完成度文本注释fig.add_annotation(x=mid_date,y=row['Task'],text=f"{row['Completion']}%",showarrow=False,font=dict(size=10, color='black'),bgcolor="white",bordercolor="black",borderwidth=1,borderpad=2)# 添加进度条progress_end = row['Start'] + (row['Finish'] - row['Start']) * (row['Completion'] / 100)fig.add_trace(go.Scatter(x=[row['Start'], progress_end, progress_end],y=[row['Task'], row['Task'], None],mode='lines',line=dict(color='black', width=3),showlegend=False))# 添加里程碑标记
milestones = [dict(Task="需求分析", Date='2023-06-12', Description="需求确认完成"),dict(Task="系统设计", Date='2023-06-20', Description="设计文档评审"),dict(Task="上线部署", Date='2023-07-15', Description="系统正式上线"),
]for milestone in milestones:date = pd.to_datetime(milestone['Date'])fig.add_trace(go.Scatter(x=[date],y=[milestone['Task']],mode='markers+text',marker=dict(symbol='diamond', size=15, color='red'),text=[milestone['Description']],textposition="top right",textfont=dict(size=10, color='red'),name='里程碑',showlegend=False))# 添加今日线
today = datetime(2023, 6, 25)
fig.add_shape(type="line",x0=today,x1=today,y0=0,y1=1,yref="paper",  # 使用相对坐标line=dict(color="red",width=2,dash="dot")
)# 添加关键路径说明
fig.add_annotation(x=pd.to_datetime('2023-06-15'),y=8,text="关键路径:后端开发 → 测试阶段 → 上线部署",showarrow=True,arrowhead=2,arrowsize=1,arrowwidth=2,arrowcolor="red",ax=-50,ay=-70,font=dict(size=12, color="red"),bgcolor="rgba(255, 255, 255, 0.8)",bordercolor="red",borderwidth=1,borderpad=4
)# 添加项目总时长
total_days = (df['Finish'].max() - df['Start'].min()).days
fig.add_annotation(x=pd.to_datetime('2023-07-10'),y=0.5,text=f"项目总时长: {total_days}天",showarrow=False,font=dict(size=14, color="black", family="Arial Black"),bgcolor="rgba(173, 216, 230, 0.7)",bordercolor="blue",borderwidth=1,borderpad=4
)# 更新布局
fig.update_layout(title=dict(text='<b>项目开发计划甘特图</b>',font=dict(size=24, family='Arial', color='darkblue'),x=0.05,y=0.95),xaxis_title='日期',yaxis_title='任务',height=700,width=1200,margin=dict(l=100, r=100, t=100, b=100),hovermode="y unified",legend=dict(title='资源类型',orientation='h',yanchor='bottom',y=1.02,xanchor='right',x=1),plot_bgcolor='rgba(245, 245, 245, 1)',paper_bgcolor='rgba(255, 250, 240, 1)'
)# 确保输出目录存在
os.makedirs('output', exist_ok=True)# 保存为HTML文件(交互式)
html_path = os.path.join('output', 'gantt_chart.html')
fig.write_html(html_path)
print(f"交互式甘特图已保存至: {html_path}")# 保存为静态图片(PNG)
img_path = os.path.join('output', 'gantt_chart.png')
fig.write_image(img_path, scale=2)
print(f"静态甘特图已保存至: {img_path}")# 显示图表
img_data = to_image(fig, format='png', scale=2)
plt.imshow(mpimg.imread(io.BytesIO(img_data)))
plt.axis('off')
plt.show()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/web/82802.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

04 APP 自动化- Appium toast 元素定位列表滑动

文章目录 一、toast 元素的定位二、滑屏操作 一、toast 元素的定位 toast 元素就是简易的消息提示框&#xff0c;toast 显示窗口显示的时间有限&#xff0c;一般3秒左右 # -*- codingutf-8 -*- from time import sleep from appium import webdriver from appium.options.an…

C/C++ OpenCV 矩阵运算

C/C OpenCV 矩阵运算详解 &#x1f4a1; OpenCV 是一个强大的开源计算机视觉和机器学习库&#xff0c;它提供了丰富的矩阵运算功能&#xff0c;这对于图像处理和计算机视觉算法至关重要。本文将详细介绍如何使用 C/C 和 OpenCV 进行常见的矩阵运算。 矩阵的创建与初始化 在进…

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…

USB扩展器与USB服务器的2个主要区别

在现代办公和IT环境中&#xff0c;连接和管理USB设备是常见需求。USB扩展器&#xff08;常称USB集线器&#xff09;与USB服务器&#xff08;如朝天椒USB服务器&#xff09;是两类功能定位截然不同的解决方案。前者主要解决物理接口数量不足的“近身”连接扩展问题&#xff0c;而…

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…

验证负载均衡与弹性伸缩

什么是弹性伸缩&#xff08;Auto Scaling&#xff09;&#xff1f; 弹性伸缩是指 云计算平台根据实时负载自动调整计算资源&#xff08;如服务器实例、容器Pod&#xff09;数量&#xff0c;以确保系统在高峰时保持稳定&#xff0c;在低谷时节省成本。 什么时候会触发弹性伸缩&…

区分viewmodel和model职责的方法

gpt回答挺好的&#xff0c;我就分享一下。 1. 最经典的一句话区分 Model&#xff08;Repository/数据层&#xff09;&#xff1a;只负责**“数据获取/存储/持久化”和“核心业务算法”**&#xff0c;不依赖UI层和Android框架&#xff0c;可以脱离界面独立存在。 ViewModel&…

C语言数据结构笔记3:Union联合体+结构体取8位Bool量

本文衔接上文要求&#xff0c;新增8位bool量的获取方式。 目录 问题提出&#xff1a; Union联合体struct结构体(方式1)&#xff1a; Union联合体struct结构体(方式2)&#xff1a; BYTE方式读取&#xff1a; 问题提出&#xff1a; 在STM32单片机的编程中&#xff0c;无法定义Boo…

三种读写传统xls格式文件开源库libxls、xlslib、BasicExcel的比较

最近准备读写传统xls格式文件&#xff0c;而不是较新的xlsx&#xff0c;询问DeepSeek有哪些开源库&#xff0c;他给出了如下的简介和建议&#xff0c;还给出了相应链接&#xff0c;不过有的链接已失效。最后还不忘提醒&#xff0c;现在该用xlsx格式了。 以下是几个可以处理传统…

从测试角度看待CI/CD,敏捷开发

什么是敏捷开发&#xff1f; 是在高强度反馈的情况下&#xff0c;短周期&#xff0c;不断的迭代产品&#xff0c;满足用户需求&#xff0c;抢占更多的市场 敏捷开发是什么&#xff1f; 是一种产品快速迭代的情况下&#xff0c;降低出错的概率&#xff0c;具体会落实到公司的…

figma MCP + cursor如何将设计稿生成前端页面

一、准备工作 figma MCP需要通过figma key来获取设计稿权限&#xff0c;key的生成步骤如下 1. 打开figma网页版/APP&#xff0c;进入账户设定 2. 点击生成token 3. 填写内容生成token(一定要确认复制了&#xff0c;不然关闭弹窗后就不会显示了) 二、配置MCP 4. 进入到cursor…

git互联GitHub 使用教程

一、下载git Git 公司 右键 git config --global user.name "name" git config --global user.email "email" ssh-keygen -t rsa -C email &#xff1a;生成的ssh密钥需要到github 网站中保存ssh 二、GitHub新建repository 三、本地git互联GitHub 找…

“轻量应用服务器” vs. “云服务器CVM”:小白入门腾讯云,哪款“云机”更适合你?(场景、配置、价格对比解析)

更多云服务器知识&#xff0c;尽在hostol.com 当你第一次踏入腾讯云这个“数字百货大楼”&#xff0c;面对琳琅满目的“云产品”&#xff0c;是不是有点眼花缭乱&#xff0c;特别是看到“轻量应用服务器”和“云服务器CVM”这两位都号称能帮你“安家落户”的“云主机”时&…

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能&#xff0c;我们需要对它的功能特点进行分析&#xff1a; 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具&#xff1a; mysql&#xff1a;关系型数据库&am…

Qt学习及使用_第1部分_认识Qt---Qt简介

前言 学以致用,通过QT框架的学习,一边实践,一边探索编程的方方面面. 参考书:<Qt 6 C开发指南>(以下称"本书") 标识说明:概念用粗体倾斜.重点内容用(加粗黑体)---重点内容(红字)---重点内容(加粗红字), 本书原话内容用深蓝色标识,比较重要的内容用加粗倾斜下划线…

Python语法基础篇(包含类型转换、拷贝、可变对象/不可变对象,函数,拆包,异常,模块,闭包,装饰器)

Python语法基础篇&#xff08;二&#xff09; 类型转换拷贝可变对象与不可变对象可变对象不可变对象 函数拆包异常模块闭包装饰器 &#x1f439;&#x1f439;&#x1f439;&#x1f439;&#x1f439;一只正在努力学习计算机技术的小仓鼠&#xff0c;尾部有课程链接哦~&#x…

录制mp4

目录 单线程保存mp4 多线程保存mp4 rtsp ffmpeg录制mp4 单线程保存mp4 import cv2 import imageiocv2.namedWindow(photo, 0) # 0窗口大小可以任意拖动&#xff0c;1自适应 cv2.resizeWindow(photo, 1280, 720) url "rtsp://admin:aa123456192.168.1.64/h264/ch1/main…

ISBN书号查询接口如何用PHP实现调用?

一、什么是ISBN书号查询接口 ISBN数据查询接口是一项图书信息查询服务。它基于全球通用的ISBN编码系统&#xff0c;帮助用户快速获取图书的详细信息&#xff0c;包括书名、作者、出版社、出版时间、价格、封面等关键字段。 该接口广泛应用于电商平台、图书馆管理系统、二手书…

Redis底层数据结构之深入理解跳表(2)

上一篇文章中我们详细讲述了跳表的增添、查找和修改的操作&#xff0c;这篇文章我们来讲解一下跳表在多线程并发时的安全问题。在Redis中&#xff0c;除了网络IO部分和大文件的后台复制涉及到多线程外&#xff0c;其余任务执行时全部都是单线程&#xff0c;这也就意味着在Redis…

Go语言依赖管理与版本控制-《Go语言实战指南》

在现代软件开发中&#xff0c;项目的第三方依赖和版本控制扮演着至关重要的角色。Go 语言自 Go 1.11 引入 Modules&#xff08;模块化管理&#xff09;以来&#xff0c;已经实现了内建的依赖管理机制&#xff0c;彻底摆脱了传统 GOPATH 模式的限制。 本章将深入探讨如何使用 Go…