【问题标题】:Matplotlib: automatically modify axis labelsMatplotlib:自动修改轴标签
【发布时间】:2017-04-25 09:26:51
【问题描述】:

我知道可以通过手动设置来更改轴标签。 (例如:Modify tick label text

但是,这显然只有在您知道自己想要什么标签的情况下才有效,而我的情况并非如此。

以下是我想要完成的示例: 我有两个 numpy 数组:x 包含 1 到 366 之间的数字(但不一定是全部),代表 2016 年的天数。“y”包含其他数字。我想做一个'y'与'x'的散点图:

import numpy as np
import matplotlib.pyplot as plt
x = np.array([27, 38, 100, 300])
y = np.array([0.5, 2.5, 1.0, 0.8])
plt.scatter(x, y)

不出所料,这会生成一个刻度为 0、50、100、...、350 的图表。我想将这些刻度标签更改为单个日期。 (例如,50 处的刻度将被标记为“2 月 19 日”。)假设我有一个函数 tick_to_date 可以将数字 0 转换为日期字符串,所以我很容易手动更改所有刻度在我的图表中。 (如果需要占位符函数:tick_to_date = lambda x: ("day " + str(x))

ax = plt.gca()
ax.set_xticklabels([tick_to_date(tick.get_text()) for tick in ax.get_xticklabels()])

但是,这只执行一次。如果我现在放大或执行任何更改刻度的操作,新的刻度标签将不会是我想要的。

理想情况下,我不会手动设置标签,而是告诉轴始终使用我自己的 tick_to_date 函数转换刻度标签。或者,每次更改刻度时都调用上面的代码行,但我不确定它是否能正常工作。这些是可能的/可行的/令人愉快的吗?

【问题讨论】:

    标签: python matplotlib


    【解决方案1】:

    如果我真的理解你的问题,你正在寻找来自 matplotlib.ticker 的function formatter

    import numpy as np
    import matplotlib.pyplot as plt
    from matplotlib import ticker
    
    # I added 'y' to fit second argument (position) of FuncFormatter
    tick_to_date = lambda x,y: ("day " + str(x))
    
    x = np.array([27, 38, 100, 300])
    y = np.array([0.5, 2.5, 1.0, 0.8])
    plt.scatter(x, y)
    
    ax = plt.gca()
    # tick_to_date will affect all tick labels through MyFormatter
    myFormatter = ticker.FuncFormatter(tick_to_date)
    # apply formatter for selected axis
    ax.xaxis.set_major_formatter(myFormatter)
    plt.show()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-09
      • 2020-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多