Я хочу создать график QQ с Matplotlib, используя формулу @ImportanceOfBeingErnest описывает здесь .
Входные данные поступают из столбцов pd.DataFrame. Эти значения необходимо преобразовать в ndarrays перед передачей в matplotlib. Как мне преобразовать pandas DatetimeIndex так, чтобы это допустимый ввод в вызов np.percentile ()?
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(y2.index.min(), y2.index.max(), dtype='datetime64[D]')
y = y2['close'].values
percs = np.linspace(0, 100, 21)
qn_x = np.percentile(x, percs)
qn_y = np.percentile(y, percs)
plt.plot(qn_x,qn_y, ls="", marker="o")
x = np.linspace(np.min((qn_x.min(),qn_y.min())), np.max((qn_x.max(),qn_y.max())))
plt.plot(x,x, color="k", ls="--")
plt.show()
Обратный путь:
---------------------------------------------------------------------------
UFuncTypeError Traceback (most recent call last)
<ipython-input-18-c11d868c3be2> in <module>
9
10 percs = np.linspace(0,100,21)
---> 11 qn_x = np.percentile(x, percs)
12 qn_y = np.percentile(y, percs)
13
<__array_function__ internals> in percentile(*args, **kwargs)
~\Anaconda3\lib\site-packages\numpy\lib\function_base.py in percentile(a, q, axis, out, overwrite_input, interpolation, keepdims)
3704 raise ValueError("Percentiles must be in the range [0, 100]")
3705 return _quantile_unchecked(
-> 3706 a, q, axis, out, overwrite_input, interpolation, keepdims)
3707
3708
~\Anaconda3\lib\site-packages\numpy\lib\function_base.py in _quantile_unchecked(a, q, axis, out, overwrite_input, interpolation, keepdims)
3824 r, k = _ureduce(a, func=_quantile_ureduce_func, q=q, axis=axis, out=out,
3825 overwrite_input=overwrite_input,
-> 3826 interpolation=interpolation)
3827 if keepdims:
3828 return r.reshape(q.shape + k)
~\Anaconda3\lib\site-packages\numpy\lib\function_base.py in _ureduce(a, func, **kwargs)
3401 keepdim = (1,) * a.ndim
3402
-> 3403 r = func(a, **kwargs)
3404 return r, keepdim
3405
~\Anaconda3\lib\site-packages\numpy\lib\function_base.py in _quantile_ureduce_func(a, q, axis, out, overwrite_input, interpolation, keepdims)
3939 n = np.isnan(ap[-1:, ...])
3940
-> 3941 x1 = take(ap, indices_below, axis=axis) * weights_below
3942 x2 = take(ap, indices_above, axis=axis) * weights_above
3943
UFuncTypeError: ufunc 'multiply' cannot use operands with types dtype('<M8[D]') and dtype('float64')
Я понимаю, что scipy.stats.probplot
может сделать это, однако, это слишком абстрактно для моего варианта использования.