在 matplotlib 中垂直对齐共享相同 x 轴的时间序列(绘图和条形图)
Vertically align time series (plot and barplot) sharing same x-axis in matplotlib
有没有一种简单的方法可以在 matplotlib 中对齐不同类型的时间序列(plot 和 barplot)的两个子图?我使用 pandas 包装器,因为我正在处理 pd.Series
对象:
import pandas as pd
import matplotlib.pyplot as plt
series = pd._testing.makeTimeSeries()
fig, axes = plt.subplots(2, 1)
series.head(3).plot(marker='o', ax=axes[0])
series.head(3).plot.bar(ax=axes[1])
plt.tight_layout()
结果在视觉上不是很好,保持代码简单就好了:
- 将顶部图中的数据点与底部图中的条形垂直对齐
- 与第一个共享条形图的轴并完全删除顶部图的 x 轴标签的可见性(但保留网格)
根据评论中的想法,我认为这是最简单的解决方案(放弃pandas API),这正是我需要的:
import pandas as pd
import matplotlib.pyplot as plt
series = pd._testing.makeTimeSeries()
fig, axes = plt.subplots(2, 1, sharex=True)
axes[0].plot(series.head(3), marker='o')
axes[1].bar(series.head(3).index, series.head(3))
plt.tight_layout()
最终修复了 xticks 缺失值的情况,其中 xticks 不是每天绘制的(例如 plt.xticks(series.head(3).index)
)。
感谢您的帮助!
有没有一种简单的方法可以在 matplotlib 中对齐不同类型的时间序列(plot 和 barplot)的两个子图?我使用 pandas 包装器,因为我正在处理 pd.Series
对象:
import pandas as pd
import matplotlib.pyplot as plt
series = pd._testing.makeTimeSeries()
fig, axes = plt.subplots(2, 1)
series.head(3).plot(marker='o', ax=axes[0])
series.head(3).plot.bar(ax=axes[1])
plt.tight_layout()
结果在视觉上不是很好,保持代码简单就好了:
- 将顶部图中的数据点与底部图中的条形垂直对齐
- 与第一个共享条形图的轴并完全删除顶部图的 x 轴标签的可见性(但保留网格)
根据评论中的想法,我认为这是最简单的解决方案(放弃pandas API),这正是我需要的:
import pandas as pd
import matplotlib.pyplot as plt
series = pd._testing.makeTimeSeries()
fig, axes = plt.subplots(2, 1, sharex=True)
axes[0].plot(series.head(3), marker='o')
axes[1].bar(series.head(3).index, series.head(3))
plt.tight_layout()
最终修复了 xticks 缺失值的情况,其中 xticks 不是每天绘制的(例如 plt.xticks(series.head(3).index)
)。
感谢您的帮助!