Seaborn中柱状图的绘制方法
seaborn中绘制折线图使用的是sns.barplot()函数:
sns.barplot(x,y,hue,data,order,hue_order,estimator,ci=95,n_boot=1000,units,seed,orient,color,palette,saturation=0.75,errcolor=‘.26’,errwidth,capsize,dodge=True,ax,**kwargs,)
关键常用参数说明:
x, y:必需的参数,用于指定数据集中柱状图的x轴和y轴数据。
hue:可选参数,用于指定分类变量,根据该变量的不同取值,柱状图的颜色会有所区分。
data:可选参数,用于指定数据集。可以是一个Pandas的DataFrame、Numpy的数组、Python的列表或其他类似的数据结构。
order:可选参数,用于指定x轴上柱状图的顺序。可以是一个列表,表示柱状图的顺序;也可以是一个DataFrame的列名,表示根据该列的值进行排序。
estimator:可选参数,用于指定柱状图的估计函数。默认值为np.mean,表示计算均值;可以设置为其他函数,如np.median等。
ci:可选参数,用于指定误差线的置信区间。默认值为"boot",表示使用bootstrap方法计算置信区间;可以设置为其他值,如"sd"、“sem"等。
orient:可选参数,用于指定柱状图的方向。默认值为"v”,表示垂直方向;可以设置为"h",表示水平方向。
palette:可选参数,用于指定柱状图的颜色调色板。可以是一个颜色名称字符串,表示使用预定义的调色板;也可以是一个颜色列表,表示自定义的调色板。
capsize:可选参数,用于指定误差线的帽子大小。默认值为None,表示不显示误差线的帽子。
ax:可选参数,用于指定绘图的坐标轴。如果没有指定,则会创建一个新的坐标轴。
**kwargs:用于传递其他绘图参数,例如图像的标题、标签、颜色等。
使用Seaborn绘制柱状图的应用案例
代码如下:
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from datetime import datetime
from matplotlib.font_manager import FontProperties
# 设置为默认字体
plt.rcParams['font.family'] = 'simhei'
# 显示负数
plt.rcParams['axes.unicode_minus'] = False
# 导入股票交易数据
df = pd.read_excel("2023年一季度A股日线行情.xlsx")
# 将日期列转化为日期格式
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"和"000002.SZ"的两只股票
df = df[df["ts_code"].isin(("000001.SZ","000002.SZ"))]
# 筛选2023年3月的行情数据
start_date = '2023-03-01'
end_date = '2023-03-31'
df = df.loc[start_date:end_date]
# 给股票代码加上股票名称
def get_name(ts_code):
if ts_code == "000001.SZ":
return "Bank of PingAn"
if ts_code == "000002.SZ":
return "WanKe A"
df["name"] = [get_name(i) for i in df["ts_code"]]
# 只保留name和交易量,交易额三列
df = df[['name', 'vol', 'amount']]
# 分别按周统计交易量和交易额
stock = df.groupby('name').resample('W').sum()
# 将stock这个dataframe重新格式化,将其原来的索引还原为列
# 避免绘图时,日期出现 00:00:00的字样
stock = pd.DataFrame(stock)
stock = stock.reset_index()
stock['trade_date'] = stock['trade_date'].dt.date
# 设置图形样式
sns.set(style="whitegrid")
# 创建画布和子图
fig, ax = plt.subplots(1, 2, figsize=(16, 9))
# 绘制柱状图
sns.barplot(x='trade_date', y='vol', hue='name', data=stock, ax=ax[0])
sns.barplot(x='trade_date', y='amount', hue='name', data=stock, ax=ax[1])
# 设置标题和标签
ax[0].set_title('Stock Trade Volumn')
ax[0].set_xlabel('Week')
ax[0].set_ylabel('Volumn/Amount')
ax[1].set_title('Stock Trade Amount')
ax[1].set_xlabel('Week')
ax[1].set_ylabel('Amount')
# 显示图形
plt.show()
代码最终运行效果图如下: