python数据可视化技巧的100个练习 -- 19. 股票价格的蜡烛图
你是一家金融公司的数据分析师。你的经理要求你创建一个蜡烛图,以可视化一段时间内某公司的股票价格。为此,你需要生成一个包含日期、开盘价、最高价、最低价和收盘价的股票价格数据集。【数据生成代码示例】
import pandas as pdimport numpy as npimport datetime# 生成日期范围dates = pd.date_range(start='2023-01-01', end='2023-01-10')# 生成随机股票价格np.random.seed(0)data = {'Date': dates, 'Open': np.random.randint(100, 200, size=len(dates)), 'High': np.random.randint(200, 300, size=len(dates)), 'Low': np.random.randint(50, 100, size=len(dates)), 'Close': np.random.randint(100, 200, size=len(dates))}# 创建 DataFramedf = pd.DataFrame(data)# 确保 'Date' 列是 datetime 类型df['Date'] = pd.to_datetime(df['Date'])# 打印 DataFrameprint(df)
【图表答案】
【代码答案】
import pandas as pdimport numpy as npimport datetimeimport matplotlib.pyplot as pltimport matplotlib.dates as mdatesfrom mplfinance.original_flavor import candlestick_ohlc# 生成日期范围dates = pd.date_range(start='2023-01-01', end='2023-01-10')# 生成随机股票价格np.random.seed(0)data = {'Date': dates, 'Open': np.random.randint(100, 200, size=len(dates)), 'High': np.random.randint(200, 300, size=len(dates)), 'Low': np.random.randint(50, 100, size=len(dates)), 'Close': np.random.randint(100, 200, size=len(dates))}# 创建 DataFramedf = pd.DataFrame(data)# 确保 'Date' 列是 datetime 类型df['Date'] = pd.to_datetime(df['Date'])# 将日期转换为 matplotlib 格式df['Date'] = [mdates.date2num(date) for date in df['Date']]# 准备蜡烛图数据ohlc = df[['Date', 'Open', 'High', 'Low', 'Close']].values# 创建图形和坐标轴fig, ax = plt.subplots()# 绘制蜡烛图candlestick_ohlc(ax, ohlc, width=0.6, colorup='g', colordown='r')# 设置标签和标题ax.set_xlabel('日期')ax.set_ylabel('价格')ax.set_title('股票价格的蜡烛图')# 格式化 x 轴以显示日期ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))plt.xticks(rotation=45)# 显示图表plt.show()
为了创建股票价格的蜡烛图,我们首先需要生成一个包含日期、开盘价、最高价、最低价和收盘价的数据集。使用 pandas 库创建日期范围,使用 numpy 生成随机股票价格。然后创建一个 DataFrame 来保存这些数据,并确保 'Date' 列是 datetime 类型。生成数据后,我们将日期转换为适合与 matplotlib 绘图的格式。使用 mplfinance 的 candlestick_ohlc 函数绘制蜡烛图。我们设置图形和坐标轴用于绘图,然后使用 candlestick_ohlc 函数绘制数据。添加标签和标题以便于理解,格式化 x 轴以正确显示日期。【小知识】
它在指定时间段内提供了价格走势的视觉表示,并且广泛用于金融市场的技术分析。每个蜡烛代表一个时间段(例如一天),并显示该期间的开盘价、最高价、最低价和收盘价。