如何根据缩放级别为刻度定义不同的功能

时间:2019-06-12 20:58:30

标签: python matplotlib graph interactive

我有一个数据分析图,其中x轴包含日期。该情节应该是交互式的,我想做的是以下几点: 随着您越来越放大,我希望图形(每个点都具有更大的缩放比例)

  • 仅显示年份滴答声
  • 仅显示月份滴答声
  • 仅显示日期刻度
  • 每天限制分辨率

到目前为止,我找到的最好的解决方案是使用

ax.xaxis.set_major_formatter(FuncFormatter(dateticks))
ax.xaxis.set_major_locator(MaxNLocator(12)) #limits ticks
fig.autofmt_xdate() #rotates strings

“ dateticks”是根据x值返回日期字符串的函数(例如“ 18-3-2018”)

此解决方案一次限制屏幕上的总刻度,并在放大时显示新的刻度,但显示“随机”日期,并且当绘图被缩小时,您不知道年份间隔在哪里是。此外,如果您放大了一天的分辨率,它将在同一天添加额外的刻度。

我从2018年9月才开始编码,但我喜欢它!有人可以帮忙吗?

Here is a plot of my real code ,下面是重现我当前情况的代码:

import datetime
import matplotlib.pyplot as plt
from matplotlib.ticker import FuncFormatter,MaxNLocator

def dateticks(dayssince00,pos):
    start=datetime.date(2000,1,1)
    new= start+datetime.timedelta(days=dayssince00)
    return "{}-{}-{}".format(new.day, new.month, new.year)

def graph():
    fig, ax = plt.subplots(1)

    days=[x for x in range(1000)]
    func=[x**2 for x in days]
    plt.plot(days,func)

    ax.xaxis.set_major_formatter(FuncFormatter(dateticks))
    ax.xaxis.set_major_locator(MaxNLocator(12)) #limits ticks
    fig.autofmt_xdate() #rotates strings

    plt.grid()
    plt.show()

graph()

1 个答案:

答案 0 :(得分:0)

确切的指定缩放行为可能有点难以实现,但是默认值与之接近。

import datetime
import matplotlib.pyplot as plt

def dateticks(dayssince00):
    start=datetime.date(2000,1,1)
    new= start+datetime.timedelta(days=dayssince00)
    return new

def graph():
    fig, ax = plt.subplots(1)

    day_num = list(range(1000))
    days = [dateticks(x) for x in day_num]
    func = [x**2 for x in day_num]
    plt.plot(days,func)

    fig.autofmt_xdate() #rotates strings

    plt.grid()
    plt.show()

graph()