使用Pandas实现股票交易数据可视化

一、折线图:展现股价走势

1.1、简单版-股价走势图

 # 简洁版import pandas as pdimport matplotlib.pyplot as plt# 读取CSV文件df = pd.read_csv('../数据集/格力电器.csv')data = df[['high', 'close']].plot()plt.show()

首先通过df[['high','close']]从df中获取最高价和收盘价这两列特征数据,其为一个DataFrame数组对象,调用该对象的plot()对象,就可以完成绘制。

plot()函数生成图形时,默认将DataFrame对象的索引传给Matplotlib绘制X轴,DataFrame对象的各列数据作为Y轴分别绘制折线等图形。使用plt.show()函数展示。

参数名称描述
x指定应用于X轴的行标签或位置,默认为None,仅对DataFrame有效
y指定应用于Y轴的行标签或位置,如果有多个,存放于list中,默认为None,仅对DataFrame有效
kindstr,指定绘制的图形类型:"line":折线图(默认)。"density":密度图。"bar":条形图。"area":面积图。"barth":横向条形图。"pie":饼图。"hist":直方图。"scatter":散点图需要指定X轴、Y轴**。"box":箱线图。"hexbin":蜂巢图,需要指定X轴、Y轴。"kde":密度图。
ax绘制图形的subplot对象,默认为当前的subplot对象
subplotsbool。是否针对不同列单独绘制子图
sharex如果ax为None,则默认为True,否则为False
shareybool。在subplots=True前提下,如果有子图,子图是否共享Y轴,默认为False
figsize元组型。(wigth,height),指定画布尺寸大小,单位为英寸
user_indexbool。是否使用索引作为X轴数据,默认为True
title标题
gridbool。是否显示网格
legendbool。是否显示网格的图例,默认为True
xticks序列。设置X轴的刻度值
yticks序列。设置Y轴的刻度值
xlim数值(最小值)、列表或元组(区间范围)。设置X轴范围
ylim数值(最小值)、列表或元组(区间范围)。设置Y轴范围
xlabel设置X轴的名称。默认使用行索引名。仅支持Pandas1.1.0及以上版本
ylabel设置Y轴的名称。仅支持Pandas1.1.0及以上版本
rotint。设置轴刻度旋转角度,默认为None
fontsizeint。设置轴刻度字体大小
colormapstring或colormap对象。设置图区域颜色
secondary_ybool或序列。是否需要在次Y轴上绘制,或者在次Y轴上绘制哪些列
stackedbool,是否创建堆积图。折线图和条形图默认为F alse,面积图默认为True

1.2、美化版-股价走势图

 import pandas as pdimport matplotlib.pyplot as plt​plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置中文格式plt.rcParams['axes.unicode_minus'] = False  # 正常显示负号​df = pd.read_csv('../数据集/格力电器.csv')data = df[['high','close']].head(22)# x轴刻度x_ticks = [i for i in range(data.shape[0])]# 美化版data.plot(title='最高价和收盘价的股价走势图',xlabel='行索引值',    # 默认值ylabel='股价',xticks=x_ticks)plt.show()  # 展示图形

1.3、添加日期的股价走势图

 import pandas as pdimport matplotlib.pyplot as plt​plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置中文格式plt.rcParams['axes.unicode_minus'] = False  # 正常显示负号​df = pd.read_csv('../数据集/格力电器.csv')# 日期转换->'2024/04/08/date = df['trade_date'].astype(str)year = date.str[:4] # 提取前4位,即年份month=date.str[4:6] # 提取月day=date.str[6:8]   # 提取日# 合并日期,格式为YYYY/MM/DD格式的字符串df['trade_date'] = year + '/' + month + '/' +daydf.sort_values(by='trade_date',inplace=True)    # 由大到小排序x_ticks = [i for i in range(22)]​df.head(22).plot(x='trade_date',y=['high','close'],xticks = x_ticks,   # X轴刻度值rot=90, # X轴刻度值倾斜度fontsize=15,    # 字体大小title='最高价和收盘价的股价走势图',xlabel='日期',    # 默认值ylabel='股价',grid=True  # 显示网格线)plt.show()

二、散点图:展示股价影响因素

2.1、散点图

使用plot()函数绘制散点图,将kind参数设置为"scatter"即可,

 import pandas as pdimport matplotlib.pyplot as plt​plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置中文格式plt.rcParams['axes.unicode_minus'] = False  # 正常显示负号# 读取数据df = pd.read_csv('../数据集/格力电器.csv')# ---------------------------## 绘制图形df.plot(x='vol',y='high',kind='scatter',# 默认为折线图,scatter为散点图title='格力电器成交量和最高价之间的关系散点图',xlabel='成交量',ylabel='最高价',c='red',)# 展示图形plt.show()

2.2、散点图-子图

若还想展示成交量、成交额、收盘价、涨跌额、涨跌幅之间关系的散点图,可以作为子图放到一个大的画布中:

 import pandas as pdimport matplotlib.pyplot as plt​plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置中文格式plt.rcParams['axes.unicode_minus'] = False  # 正常显示负号​df = pd.read_csv('../数据集/格力电器.csv') # # 读取数据fig,axes = plt.subplots(2,2)    # 准备画布# 子图1:df.plot(x='vol',y='high',kind='scatter',# 默认为折线图,scatter为散点图title='格力电器成交量和最高价之间的关系散点图',xlabel='成交量',ylabel='最高价',c='red',ax=axes[0][0])# 子图2:df.plot(x='vol',y='close',kind='scatter',# 默认为折线图,scatter为散点图title='格力电器成交量和收盘价之间的关系散点图',xlabel='成交量',ylabel='收盘价',c='green',ax=axes[0][1])# 子图3:df.plot(x='amount',y='high',kind='scatter',# 默认为折线图,scatter为散点图title='格力电器成交额和最高价之间的关系散点图',xlabel='成交额',ylabel='最高价',c='red',ax=axes[1][0])# 子图4:df.plot(x='amount',y='close',kind='scatter',# 默认为折线图,scatter为散点图title='格力电器成交额和收盘价之间的关系散点图',xlabel='成交额',ylabel='收盘价',c='green',ax=axes[1][1])plt.subplots_adjust(wspace=0.8, # 子图之间的距离hspace=0.5)plt.show()

三、条形图:展现同比成交量

 import matplotlib.pyplot as pltimport pandas as pd​plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置中文格式plt.rcParams['axes.unicode_minus'] = False  # 正常显示负号# 1、读取CSV文件df = pd.read_csv('../数据集/格力电器.csv')date = df['trade_date'].astype(str)# 2、提取年和月year = date.str[:4]month = date.str[4:6]df['year'] = yeardf['month'] = month# 3、按照年和月分组,获取2018和2019年的每月平均成交量group = df[['year', 'month', 'vol']].groupby(by=['year', 'month'])  # 按照年和月分组g_m = group.mean()  # 获取所有字段的平均值m_18 = g_m['vol']['2018']   # 获取2018年每月平均成交量m_19 = g_m['vol']['2019']   # 获取2019年每月平均成交量# 4、将2018和2019年每月成交量平均值数据存储于DataFrame中df2 = pd.DataFrame(list(zip(m_18, m_19)), index=[str(i) + '月' for i in range(1, 13)], columns=['2018', '2019'], )# 5、绘制条形图df2.plot(kind='bar',    # 条形图title='2018年和2019年格力电器每月平均成交量条形图',xlabel='月份',ylabel='成交量均量')plt.show()

若要绘制堆叠条形图,只需在plot()函数中将参数stacked设置为True即可。

若要将条形显示为横向条形图,只需将参数kind设置为barh即可。

四、饼图:展现成交量占比关系

 import pandas as pdimport matplotlib.pyplot as plt​plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置中文格式plt.rcParams['axes.unicode_minus'] = False  # 正常显示负号#1、读取CSV文件df = pd.read_csv('../数据集/格力电器.csv')#2、提取年和月date = df['trade_date'].astype(str)year = date.str[:4] # 提取前4位,即年份month = date.str[4:6] # 提取月份df['year'] = year   # 将年份插入到数据集中df['month'] = month # 将月份插入到数据集中​#3、按照年和月分组,获取2018年每月总成交量group = df[['year','month','vol']].groupby(by=['year','month']) # 按年和月分组g_s = group.sum()   # 获取所有字段总和s_18 = g_s['vol']['2018']   # 获取2018年每月总成交量s_18.index= [str(i) + '月' for i in range(1,13)]​#4、绘制图形s_18.plot(kind='pie',title='2018年格力电器每月成交量占比',autopct='%.2f%%', # 百分比)plt.show()

五、K线图:展现股价走势

5.1、mplfinance的安装与下载

 pip install mplfinance

5.2、绘制K线图

 import mplfinance as mpfimport pandas as pd​data = pd.read_csv('../数据集/格力电器.csv')data.sort_values(by=['trade_date'], inplace=True)date = data['trade_date'].astype(str)​year = date.str[:4]month = date.str[4:6]day = date.str[6:8]data['trade_date'] = year + '/' + month + '/' + daydata.index = pd.DatetimeIndex(data['trade_date'])​data = data[['open', 'close', 'high', 'low', 'vol']]data.columns = ['Open', 'Close', 'High', 'Low', 'Volume']​mpf.plot(data.head(70), # 绘制图形的数据(选取前70条)type='candle', # 设置图像类型volume=True,   # 是否显示成交量style='charles')# 设置图表样式为"charles"

mplfinance的plot()函数的常用参数

参数描述
type设置绘制的 图像类型,有'ohlc'、'candle'、'line'、'renko'类型
volume是否显示成交量,默认不显示
style设置的图表样式,可以通过mpf.available_style()方法获取mplfinance提供的样式名称,有'binance','blueskies','brasil'....。可以自定义样式
title设置标题
ylabel设置主图Y轴标题
ylabel_lower设置次图的Y轴标题
mav设置均线,如2日均线,5日均线,10日均线等
savefig保存图片

下面通过自定义图表样式来美化K线图:

import mplfinance as mpf
import pandas as pddata = pd.read_csv('../数据集/格力电器.csv')
data.sort_values(by=['trade_date'], inplace=True)
date = data['trade_date'].astype(str)year = date.str[:4]
month = date.str[4:6]
day = date.str[6:8]
data['trade_date'] = year + '/' + month + '/' + day
data.index = pd.DatetimeIndex(data['trade_date'])data = data[['open', 'close', 'high', 'low', 'vol']]
data.columns = ['Open', 'Close', 'High', 'Low', 'Volume']# 设置K线颜色
my_color = mpf.make_marketcolors(up='red',  # 设置阳线柱填充颜色down='green',  # 设置阴线柱填充颜色edge='i',  # 设置蜡烛线边缘颜色wick='black',  # 设置蜡烛上下影线的颜色volume={'up': 'red', 'down': 'green'}  # 设置成交量颜色)# 设置图表样式
my_style = mpf.make_mpf_style(marketcolors=my_color,gridaxis='both',  # 设置网格线位置,both双向gridstyle='-.',  # 设置网格线类型base_mpf_style='charles',rc={'font.family': 'SimHei'}  # 设置字体为黑体)# 绘制K线图
mpf.plot(data.head(70),type='candle',  # 设置图像类型'ohlc'/'candle'/'line/renko'mav=(2, 5, 10),  # 绘制2日均线、5日均线和10日均线volume=True,  # 显示成交量style=my_style,  # 自定义图表样式title='格力电器2018年K线图',  # 设置标题ylabel='价格',  # 设置主图Y轴标题ylabel_lower='成交量'  # 设置次图Y轴标题)

mplfinance的make_mpf_style()函数的常用参数:

参数描述
base_mpf_style使用mplfinance中的系统样式,可以在make_marketcolors方法中使用,也可以在make_mpf_style中使用
base_mpl_style使用mplfinance中的系统样式,比如:base_mpl_style='seaborn'
marketcolors使用自定义样式
mavcolors设置nav均线颜色,必须使用列表传递参数
facecolor设置前景色
edgecolor设置边缘线颜色
figcolor设置填充色
gridcolor设置网格线颜色
gridaxis设置网格线方向,'both'、'horizontal'、'vertical‘
gridstyle设置网格线线型。'-'[或solid]、’-’[或dashed]、'-.'[或dashdot]、':'[或dotted]、None
y_on_right设置Y轴位置是否在左右
rc使用rcParams的dict设置样式,如果内容与上面自定义的设置相同,那么自定义设置覆盖rcParams设置

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

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

相关文章

Qt+vstudio2022的报错信息积累

从今天开始记录一下平常开发工作中的报错记录,后续有错误动态补充! 报错信息:【MSB8041】此项目需要 MFC 库。从 Visual Studio 安装程序(单个组件选项卡)为正在使用的任何工具集和体系结构安装它们。 解决: 背景:换…

java-Spring框架-入门学习-第一天

Spring 定义 ​Spring是一款主流的 Java EE 开源框架,目的是用于简化Java企业级引用的开发难度和开发周期。从简单性、可测试性的角度而言,任何Java应用都可以从Spring中受益。Spring框架提供自己提供功能外,还提供整合其他技术和框架的能力…

【pyhon】while语句的题目

1.计算1至100的偶数之和 sum_even 0 # 初始化偶数之和为0 i 1 # 从1开始循环 while i < 100: # 当i小于或等于100时&#xff0c;继续循环 if i % 2 0: # 如果i是偶数 sum_even i # 将i加到偶数之和上 i 1 # i自增1 print(“1至100的偶数之和为:”, sum_even) 给出乘…

Linux硬件管理

文章目录 Linux硬件管理1.查看磁盘空间 df -h2.查看文件的磁盘占用空间 du -ah3.查看系统内存占用情况 htop Linux硬件管理 1.查看磁盘空间 df -h 语法 df [选项][参数]选项 -a或–all&#xff1a;包含全部的文件系统&#xff1b; –block-size<区块大小>&#xff1a;…

基于接缝裁剪的图像压缩算法研究

基于接缝裁剪的图像压缩算法研究 引言接缝裁剪算法概述a. 可能接缝数量的证明b. 破坏度最低接缝的寻找 算法设计伪代码C语言实现 时间复杂度分析结论 引言 在数字图像处理领域&#xff0c;图像压缩技术是一种非常重要的技术&#xff0c;它能够减少图像文件的存储空间和传输带宽…

P450焕新而来,室内外两用+路径规划+YOLO点击跟踪,算力高达100TOPS

Prometheus 450&#xff08;简称P450&#xff09;是一款室内室外两用的中型轴距&#xff08;410mm&#xff09;无人机&#xff0c;基于F450基础飞行平台&#xff0c;搭载感知传感器二维平面激光雷达&#xff0c;双目深度相机等&#xff0c;配合软件Prometheus自主无人机系统和S…

Cloudflare Workers 付费文档

定价 默认情况下&#xff0c;用户可以访问Workers免费计划。Workers免费计划包括对Workers、Pages Functions和Workers KV的有限使用。了解更多关于免费计划限制的信息。 Workers付费计划包括Workers、Pages Functions、Workers KV和Durable Objects的使用&#xff0c;每个账…

[大模型]InternLM2-7B-chat WebDemo 部署

InternLM2-7B-chat WebDemo 部署 InternLM2 &#xff0c;即书生浦语大模型第二代&#xff0c;开源了面向实用场景的70亿参数基础模型与对话模型 &#xff08;InternLM2-Chat-7B&#xff09;。模型具有以下特点&#xff1a; 有效支持20万字超长上下文&#xff1a;模型在20万字…

OSPF - 链路状态路由协议

IGP 外部网关路由协议&#xff1a; OSPF &#xff0c; IS-IS EGP 内部网关路由协议&#xff1a; BGP 协议算法&#xff1a; 距离矢量路由协议 链路状态路由协议 lsdb:链路状态数据库 - 存放lsa的地址 RIP&#xff1a;有方向的矢量&#xff0c;距离矢量路由协议&#xf…

2024 年排名前 5 的 CSS 框架

文章目录 1、Bootstrap2、Tailwind CSS3、Foundation4、Bulma5、UIKit 1、Bootstrap Bootstrap框架是由Twitter的设计师Mark Otto和Jacob Thornton合作开发的&#xff0c;于2011年8月在GitHub上发布。它是目前最受欢迎的前端框架之一&#xff0c;被广泛应用于各种Web项目中。Bo…

【喜讯】优积科技受邀第五届上海建筑装配式内装产业大会,荣获两项大奖

2024年3月27-31日&#xff0c;由上海市内装饰行业协会装配式内装产业专业委员会、国家建筑装配式内装产业基地联合组织发起主办“第五届2024 |上海建筑装配式内装产业大会暨装配式装修新材料推广会”&#xff0c;大会以“高技术、高质量、高水平”为主题&#xff0c;聚焦于推动…

数据结构进阶之堆

今天我们学习的是数据结构里面的堆&#xff0c;大家先看看我们今天要学习的内容 一、堆概念及认识 在学习堆之前我们得先明白完全二叉树是什么样子&#xff0c;因为堆是依据完全二叉树的结构来实现的&#xff0c;所以在这里我先告诉大家完全二叉树的是什么&#xff0c;如下图…