当前位置: 首页 > news >正文

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()

相关文章:

  • Git 切换到旧提交,同时保证当前修改不丢失
  • Qt客户端技巧 -- 窗口美化 -- 窗口阴影
  • Truffle 和 Ganache 使用指南
  • 龙石数据中台V3.5.1升级 | 数据实时收集来了!
  • 使用VuePress2.X构建个人知识博客,并且用个人域名部署到GitHub Pages中
  • 从入门到进阶:Python 学习参考书的深度解析
  • 全面理解 Linux 内核性能问题:分类、实战与调优策略
  • MySQL基本操作
  • 山洪径流过程及洪水淹没数值模拟
  • [Java恶补day17] 41. 缺失的第一个正数
  • Meta Prompting 完整指南
  • 1.3 编译程序:单个C文件和多个C文件
  • 编译构建C++程序时ABI一致性问题
  • Java设计模式之状态模式详解
  • Unity基础-数学向量
  • NY118NY120美光固态闪存NY124NY129
  • 高股息打底+政策催化增强+永续经营兜底
  • 每日算法 -【Swift 算法】电话号码字母组合
  • CSS6404L 在物联网设备中的应用优势:低功耗高可靠的存储革新与竞品对比
  • 本机无法远程别的计算机的方法
  • wordpress 英文站赚钱/免费推广工具
  • 南京营销网站开发制作报价/seo线下培训机构
  • 网站登录界面图片用什么软件做/ueeshop建站费用
  • 3g网站建设/生意参谋指数在线转换
  • 设计网站导航大全/搜索引擎优化营销
  • 安徽华夏网站建设/seo