matplotlib绘制双坐标图,其中交易量随日期变化为柱状图,数据中日期间断,即中间不连续,要求不显示未出现日期的柱子,即中间不留空白
时间: 2024-09-23 15:17:00 浏览: 48
在matplotlib中绘制双坐标图,你可以结合`datevlines()`函数来实现这种效果。首先,你需要导入必要的库,并创建一个DataFrame或者Series来存储你的数据,包括日期和交易量。假设你的数据已经按日期排序。
```python
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
# 假设你的数据是这样的
data = {
'日期': pd.date_range('2020-01-01', periods=15, freq='D'),
'交易量': [random.randint(10, 100) for _ in range(15)]
}
df = pd.DataFrame(data)
# 设置双轴图表
fig, ax1 = plt.subplots()
ax2 = ax1.twinx()
# 将日期转换为matplotlib日期格式
df['日期'] = df['日期'].apply(mdates.date2num)
# 绘制交易量柱状图
ax1.bar(df['日期'], df['交易量'], color='blue')
ax1.xaxis_date() # 设置X轴为主日期轴
# 使用datevlines()在需要的位置添加垂直线,避免显示未出现的日期
for date_num in df['日期']:
ax1.axvline(date_num, color='black', linestyle='-', alpha=0.5)
# 调整双轴范围和刻度
ax1.set_xlim(df['日期'].min(), df['日期'].max())
ax1.xaxis.set_major_locator(mdates.DayLocator(interval=7)) # 每7天设置一个主刻度
ax2.axis('off') # 关闭Y轴(如果你不需要)
plt.show()
```
在这个示例中,`datevlines()`用于在每个已有的日期处添加一条线,隐藏了中间的空白。记得替换`random.randint(10, 100)`为实际的数据值。
阅读全文