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

參數詳解

參數類型默認值說明
figurestr,?int,?Scene?或?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(x2 + y2) * 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 是待處理的字符串

關鍵參數詳解?

參數說明示例值
width,?height圖像寬高(像素)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
繁體地址,請注明出處:http://hk.pswp.cn/web/82802.shtml
英文地址,請注明出處:http://en.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…