gpt4 book ai didi

python - 以日期或其他类型值的特定交替间隔在绘图上设置背景颜色

转载 作者:行者123 更新时间:2023-12-04 00:57:31 25 4
gpt4 key购买 nike

我想做一个类似于yahoo finance charts的情节其中背景颜色根据轴刻度日期标记以交替间隔变灰。关注 an answer from a similar problem我得到这样的图像:
enter image description here
使用此代码:

n = 1000
xs = np.random.randn(n).cumsum()

plt.plot(xs)
plt.autoscale(enable=True, axis='both', tight=True)

for i in range(0, len(y_series), 400):
plt.axvspan(i, i+100, facecolor='grey', alpha=0.5)
但是,此代码的问题在于我们使用数据输入作为确定灰色区域的引用。相反,我希望灰色区域由 x 轴或 y 轴上的可见刻度确定,与输入分离。我不想使用定位器功能,因为这也违背了根据可见刻度值“自动”使背景变灰的目的。此外,我们在 x 轴上使用整数,但理想情况下,这应该适用于日期、浮点数等。
这是一个使用日期的示例,没有灰色区域:
enter image description here
使用此代码生成且没有自动缩放:
n = 700
x_series = pd.date_range(start='2017-01-01', periods=n, freq='D')
y_series = np.random.randn(n).cumsum()

fig, ax = plt.subplots()
ax.plot(x_series, y_series)
plt.gcf().autofmt_xdate()
PS:我尝试阅读棒列表,但如果关闭自动缩放,该列表不会准确反射(reflect)可见值。
locs, labels = plt.xticks()
print(locs)

[-200. 0. 200. 400. 600. 800. 1000. 1200.]

最佳答案

我认为这个问题有点繁琐,确保涵盖所有情况很乏味。确实如此xticks有时会返回 xlim 左侧和右侧的值,但这只是开始。如果数据超出最右边的 xtick,或者在最左边的之前开始,会发生什么 xtick , 等等?

例如,在下面的许多情况下,我想在 xmin 处开始(或停止)波段。或 xmax ,因为如果我不这样做并且索引会在刻度开始(或停止)后跳过带区,则会有一个很长的部分没有被带上并且看起来不正确。

因此,在处理一些不同的极端情况时,我已经将其作为覆盖(至少)我尝试过的情况:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(100, 11000, 7500)
y = x * np.sin(0.001*x) ** 2

def alt_bands(x):
locs, labels = plt.xticks()
x_left, x_right = plt.xlim()
for i, loc in enumerate(locs):
if i%2 == 1 and i<len(locs)-1 and loc<x[-1] and (loc>x_left or x[0]>x_left):
L = max(x_left, x[0], loc)
R = min(x_right, x[-1], locs[i+1])
if x[0] <= L and R>L:
plt.axvspan(L, R, facecolor='grey', alpha=0.5)

plt.plot(x, y)
alt_bands()

以下是一些示例图:

enter image description here

enter image description here

enter image description here

enter image description here

老实说,这不是我最引以为豪的 SO 答案。我没有仔细考虑逻辑,而是逐步添加条件来处理我尝试过的每个新的角落案例,但不会遇到前一个案例。如果您想仔细考虑,请随时清理它。或者有没有一种本质上干净的方法?

关于python - 以日期或其他类型值的特定交替间隔在绘图上设置背景颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61282135/

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