【问题标题】:Rotation of colorbar tick labels in matplotlibmatplotlib 中颜色条刻度标签的旋转
【发布时间】:2015-08-17 12:09:15
【问题描述】:

我想旋转颜色条刻度标签,以便它们垂直而不是水平读取。我已经尝试了cbar.ax.set_xticklabelscbar.ax.ticklabel_format 以及rotation='vertical' 的尽可能多的变化,但还没有完全落地。

我在下面提供了一个 MWE:

import numpy as np
import matplotlib.pyplot as plt

#example function
x,y = np.meshgrid(np.linspace(-10,10,200),np.linspace(-10,10,200))
z = x*y*np.exp(-(x+y)**2)

#array for contourf levels
clevs = np.linspace(z.min(),z.max(),50)

#array for colorbar tick labels
clevs1 =np.arange(-200,100,10)

cs1 = plt.contourf(x,y,z,clevs)

cbar = plt.colorbar(cs1, orientation="horizontal")
cbar.set_ticks(clevs1[::1])

plt.show()

任何指针将不胜感激 - 我相信这一定很简单......

【问题讨论】:

    标签: python numpy matplotlib colorbar


    【解决方案1】:

    这是从 Matplotlib 3.4 开始旋转刻度标签的惯用方式(很可能也是早期版本)

    cbar.ax.tick_params(rotation=45)
    

    【讨论】:

      【解决方案2】:

      您可以使用cbar.ax.set_xticklabels 更改旋转(如果您有垂直颜色条,则可以使用set_yicklabels)。

      cbar.ax.set_xticklabels(clevs1[::1],rotation=90)
      

      编辑:

      要正确设置刻度,您可以在clevs1 数组中搜索第一个刻度应使用np.argmin 的位置,并在您set_xticklabels 时使用它来索引clevs1

      tick_start = np.argmin(abs(clevs1-clevs[0]))
      cbar.ax.set_xticklabels(clevs1[tick_start:],rotation=90)
      

      【讨论】:

      • 我看过这个,但它使刻度标签不正确。
      • 它们应该是什么?你有clevs1,从-200到90,但你的例子从-100到0?
      • 刻度标签是否应该与实际的等高线不同?最好使用vminvmax for contourf 来控制颜色栏上显示的范围
      • 正确的值为-100到0; clevs1 是(假设我们不知道绘制的数据范围)可用作刻度标签的可接受值列表。
      • @KieranHunt 好的,所以只需在clevs1 中找到与clevs 的最小值相对应的第一个值。请参阅我对如何执行此操作的编辑。
      【解决方案3】:

      如果您对刻度位置和标签感到满意并且只想旋转它们:

      cbar.ax.set_xticklabels(cbar.ax.get_xticklabels(), rotation='vertical')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-06-14
        • 2020-02-18
        • 2020-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-06
        相关资源
        最近更新 更多