gpt4 book ai didi

python - 在 pandas + matplotlib 中用 colorbar 绘制时间序列

转载 作者:太空宇宙 更新时间:2023-11-03 13:59:25 25 4
gpt4 key购买 nike

我正在尝试在此图表下方绘制一个颜色条,其中颜色取决于每个时间序列的开始时间: Partial cumulative returns plotted over 2 years

创建绘图的代码是这样的:

import pandas as pd
import numpy as np

import matplotlib.pyplot as plt

import seaborn as sns
sns.set()

def partial_cum_returns(start, cum_returns):
return cum_returns.loc[start:].div(cum_returns.loc[start])

index = pd.DatetimeIndex(pd.date_range('20170101', '20190101', freq='W'))
np.random.seed(5)
returns = pd.Series(np.exp(np.random.normal(loc=0, scale=0.05, size=len(index))), index=index)
cum_returns = returns.cumprod()
df = pd.DataFrame(index=index)
for date in index:
df[date] = partial_cum_returns(date, cum_returns)

df.plot(legend=False, colormap='viridis');
plt.colorbar();

但是执行的时候出现这个错误:

RuntimeError: No mappable was found to use for colorbar creation. First define a mappable such as an image (with imshow) or a contour set (with contourf).

我尝试过以不同的方式添加颜色条,例如 fig, ax = plt.figure()... 一种,但到目前为止我无法让它工作。有任何想法吗?谢谢!

最佳答案

第一点是您需要为您的颜色栏创建一个 ScalarMappable。您需要定义颜色图,在您的例子中是 'viridis' 并指定颜色条所需的最大值和最小值。然后因为它使用你想要重新格式化的数字时间值。

import matplotlib.pyplot as plt
import pandas as pd

# Define your mappable for colorbar creation
sm = plt.cm.ScalarMappable(cmap='viridis',
norm=plt.Normalize(vmin=df.index.min().value,
vmax=df.index.max().value))
sm._A = []

df.plot(legend=False, colormap='viridis', figsize=(12,7));

cbar = plt.colorbar(sm);
# Change the numeric ticks into ones that match the x-axis
cbar.ax.set_yticklabels(pd.to_datetime(cbar.get_ticks()).strftime(date_format='%b %Y'))

enter image description here

关于python - 在 pandas + matplotlib 中用 colorbar 绘制时间序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51160705/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com