【问题标题】:Customized x-axis matplotlib定制的x轴matplotlib
【发布时间】:2020-07-21 18:38:03
【问题描述】:

我只想使用十进制年份列表来为自定义 x 轴分配标签和刻度:

labels = [1992.71, 1991.67, 1990.5, 1989.54, 1988.5, 1987.5, .., 1700.5]

重要提示:上面列表中2个连续值之间的间隔不是恒定的,我这里只关心步骤,所以列表中的每个位置都应该是一个tick或一个bin。

问题是,如果我使用列表中的所有标签,图表会变得过于密集。顺便说一句,我的图表里面是一个 PNG 图像,而不是一个绘图。

所以,我决定(可能是错误的)生成第二个列表,其中只包含我需要的值(这次使用字符串):

labels2 = ['1992.71','','','','','1987.50', etc.]

理想情况下,我希望 x 轴具有以下配置:

或者这个:

或者这个:

到目前为止,我一直在玩这些功能:

ax.set_xticklabels
plt.locator_params
ax.tick_params
plt.xticks
ax.xaxis.set_ticks
ax.xaxis.set_major_formatter
...

没有成功。

这是我最近的一次:

但是标签序列在 x 轴的右侧被 CUT 并且永远不会到达列表的末尾,所以它在列表的中途结束(应该在 1700.5 结束):

另外,我只想显示与所选标签相对应的刻度,而不是全部。

这是我的代码:

plt.locator_params(axis='x', nbins=len(labels2)-1)
ax.set_xticklabels(labels2, rotation=90 )
ax.tick_params(axis='x', which='major', length=4, labelsize=2)

本质上,目前我无法复制我想要的,

有什么想法吗?

【问题讨论】:

    标签: python matplotlib


    【解决方案1】:

    首先使用set_xticks 设置刻度位置,然后使用具有相同长度的数组的set_xticklabels 设置标签。如果您不想标记每个刻度,则设置较少的刻度和标签,如右子图中的那样。 确保标签的数量始终等于设置的刻度数

    import matplotlib.pyplot as plt
    import matplotlib.image as mpimg
    import os
    import matplotlib
    import numpy as np
    
    file = os.path.join(os.path.dirname(matplotlib.__file__), 'mpl-data/sample_data/Minduka_Present_Blue_Pack.png')
    img = mpimg.imread(file)
    labels = [1992.71, 1991.67, 1990.5, 1989.54, 1988.5, 1987.5, 1980.1, 1700.5]
    
    fig,(ax1,ax2) = plt.subplots(ncols=2)
    
    ax1.imshow(img)
    ax1.set_xticks(np.linspace(0, img.shape[1], len(labels)))
    ax1.set_xticklabels(labels, rotation = 90)
    
    ax2.imshow(img)
    ax2.set_xticks(np.linspace(0, img.shape[1], len(labels))[::2])
    ax2.set_xticklabels(labels[::2], rotation = 90)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-07
      • 2020-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-15
      • 1970-01-01
      相关资源
      最近更新 更多