柱状图的含义
柱状图是一种常用的统计图表,用于展示不同类别或组之间的比较关系。它以矩形柱形的高度来表示各个类别或组的数值大小,通过比较矩形柱形的高度,可以直观地了解数据的差异和趋势。
柱状图常用于以下几个方面的数据展示和分析:
- 数据比较:柱状图可以将不同类别或组的数值进行直观的比较。例如,可以用柱状图比较不同产品的销售额、不同地区的人口数量等。通过比较柱形的高度,可以快速了解各个类别或组之间的差异和优劣。
- 趋势分析:柱状图还可以用于展示数据在不同时间点或时间段的变化趋势。例如,可以用柱状图展示每个月的销售额变化、每年的人口增长情况等。通过观察柱形的高度变化,可以判断数据的增长或下降趋势。
- 分布情况:柱状图还可以用于展示数据的分布情况。例如,可以用柱状图展示不同年龄段的人口比例、不同收入区间的人数分布等。通过观察柱形的高度,可以了解数据在不同类别或组之间的分布情况。
需要注意的是,柱状图适用于展示离散的数据,每个类别或组之间是相互独立的。柱状图的横轴通常表示类别或组,纵轴表示数值。柱状图的宽度通常是相等的,以避免误导。
总而言之,柱状图通过矩形柱形的高度来表示数据的大小,用于展示不同类别或组之间的比较关系,便于观察数据的差异和趋势。
柱状图的绘制方法
plt.bar(x, height, width=0.8, bottom=None, *, align=‘center’, data=None, **kwargs)
参数说明:
- x:柱形图在横轴上的坐标序列,为整数或浮点数的有序数据集合,也可以为字符串的有序集合。
- height:柱形图的高度,即y轴上的坐标,为整数或浮点数的有序数据集合。
- width:柱形图的宽度,默认值为0.8,为一个固定的整数或浮点数。
- bottom:柱形图的基准高度,默认值为0,为一个固定的整数或浮点数。
- align:柱形图在x轴上的对齐方式,为字符串格式,默认为’center’,居中对齐。该参数的取值范围为{‘center’,
‘edge’},‘center’:x位于柱形图底部的中心;‘edge’:x位于柱形图底部的左侧。如果想让x位于柱形图底部的右侧,需要同时设置width值为负数以及align=‘edge’。 - color:柱状图的颜色,默认为None。可以设置为一个颜色字符串或者一个颜色列表,用于指定柱子的颜色。
- label:柱状图的标签,默认为None。可以设置为一个字符串或者一个字符串列表,用于给每个柱子添加标签。
- edgecolor:柱状图的边框颜色,默认为None。可以设置为一个颜色字符串或者一个颜色列表,用于指定柱子的边框颜色。
- linewidth:柱状图的边框宽度,默认为None。可以设置为一个数值,用于调整柱子的边框宽度。
- tick_label:柱状图的x轴刻度标签,默认为None。可以设置为一个字符串列表,用于给每个柱子添加刻度标签。
- log:柱状图的y轴是否使用对数刻度,默认为False。设置为True时,y轴使用对数刻度。
- **kwargs:额外的参数,用于控制柱状图的其他属性,例如透明度(alpha)、图例(legend)等。
柱状图在量化交易中的应用
柱状图在量化交易中有广泛的应用,常用于以下几个方面:
- 技术分析:柱状图常用于展示股价的变动情况。通过绘制每个时间段的收盘价与开盘价之间的差异,可以形成柱状图。这种类型的柱状图被称为K线图,其中的红色和绿色柱体分别表示上涨和下跌的情况。量化交易者可以通过观察柱状图的形态和变化来判断股价的趋势和交易信号,例如通过分析不同的价格形态模式(如头肩顶、双底等)。
- 成交量分析:柱状图还可以用于展示成交量的变化情况。通过绘制每个时间段的成交量柱状图,可以观察成交量的变化趋势以及与股价的关系。柱状图的高度表示成交量的大小,通过观察柱状图的形态和变化,可以判断成交量的增减和股价的走势是否一致,辅助量化交易决策。
- 统计分析:柱状图还可以用于展示不同策略或模型的回报率或风险指标。通过绘制不同策略或模型的柱状图,可以比较它们的绩效表现,了解其收益和风险情况。柱状图的高度可以表示回报率、夏普比率、最大回撤等指标,通过观察柱状图的高度和形态,可以对不同策略或模型进行评估和选择。
柱状图在量化交易中的应用案例
下面这个案例中,我们将统计“中国平安”和“万科A”这两支股票的一季度成交量和成交额,并使用柱状图加以对比。
数据准备:2023年一季度A股日线行情.xlsx
代码如下:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
# 设置为默认字体
plt.rcParams['font.family'] = 'SimHei'
# 显示负数
plt.rcParams['axes.unicode_minus'] = False
# 导入数据
df = pd.read_excel("2023年一季度A股日线行情.xlsx")
# 分别筛选出股票代码分别是"000001.SZ"和"000002.SZ"的两只股票
df = df[df["ts_code"].isin(("000001.SZ","000002.SZ"))]
# 将日期列转化为日期格式
df["trade_date"] = df["trade_date"].astype("str").apply(lambda x:x[:4]+"-"+x[4:6]+"-"+x[6:])
# 将日期列转换为日期类型,并设置为索引列
df['trade_date'] = pd.to_datetime(df['trade_date'])
df.set_index('trade_date', inplace=True)
# 筛选出股票代码是"000001.SZ"的股票
stock_1 = df[df['ts_code'] == '000001.SZ']
# 添加列"name"
stock_1['name'] = '平安银行'
# 筛选出股票代码是"000002.SZ"的股票
stock_2 = df[df['ts_code'] == '000002.SZ']
# 添加列"name"
stock_2['name'] = '万科A'
#分别按月统计两只股票的月度成交量之和
series_1 = stock_1['vol'].resample('M').sum()
series_2 = stock_2['vol'].resample('M').sum()
#分别按月统计两只股票的月度成交额之和
series_3 = stock_1['amount'].resample('M').sum()
series_4 = stock_2['amount'].resample('M').sum()
# 设置月份
months = [str(i)+'月' for i in range(1,4)]
# 分别设置两只股票的横轴坐标
x = [i for i in range(1,4)]
# 绘制柱形图,分别展示平安银行和万科A的成交量对比图
plt.bar(x, series_1, width=-0.4, align='edge', label='平安银行')
plt.bar(x, series_2, width=0.4, align='edge', label='万科A')
plt.xticks(x, months)
# 添加图例
plt.legend()
# 添加标题和坐标轴标签
plt.title('Stock Volume in 1st Quarter')
plt.xlabel('Months')
plt.ylabel('Volume')
# 显示图形
plt.show()
# 绘制柱形图,分别展示平安银行和万科A的成交额对比图
plt.bar(x, series_3, width=-0.4, align='edge', label='平安银行')
plt.bar(x, series_4, width=0.4, align='edge', label='万科A')
plt.xticks(x, months)
# 添加图例
plt.legend()
# 添加标题和坐标轴标签
plt.title('Stock Amount in 1st Quarter')
plt.xlabel('Months')
plt.ylabel('Amount')
# 显示图形
plt.show()
最终效果如下: