我一直在用python代码绘制带有彩条的4个图形。由于我使用的是Texfonts,因此matplotlib会使减号太宽。因此,我写了一个格式化函数,用连字符替换减号。
但是,由于某些原因,我无法将格式化程序应用于我的颜色栏。
我收到一个错误:

cb.ax.set_major_formatter(ticker.FuncFormatter(myfmt))
AttributeError: 'AxesSubplot' object has no attribute 'set_major_formatter'

因此,下面是我的代码中断的部分:
您是否知道如何强制颜色条使用我的格式化功能?
#!/usr/bin/env python3

import re
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import rc
from matplotlib.ticker import *
import matplotlib.ticker as ticker
import matplotlib as mpl
import matplotlib.gridspec as gridspec
from matplotlib.patches import Ellipse
from list2nparr import list2nparr
from matplotlib.ticker import ScalarFormatter

plt.rcParams['text.usetex'] = True
plt.rcParams['font.family'] = 'serif'
plt.rcParams['font.serif'] = 'cm'
plt.rcParams['font.size'] = 16
#plt.rcParams['font.weight'] = 'heavy'
plt.rcParams['axes.unicode_minus'] = False
#-----------------------------------------------------


def myfmt(x, pos=None):
  rv = format(x)
  if mpl.rcParams["text.usetex"]:
    rv = re.sub('$-$', r'\mhyphen', rv)

  return rv


fig,(ax1,ax2,ax3,ax4) = plt.subplots(nrows=4,figsize=(6,11),sharex = True, sharey=False)
data = list2nparr('radiant.txt')

lm  = data[:,14]
bet = data[:,15]
v   = data[:,16]
b   = data[:,18]
ejep = data[:,20]

fig.subplots_adjust(hspace=0.1)

cm = plt.cm.get_cmap('jet')
sc = ax1.scatter(lm, bet, c=ejep, s=10, cmap=cm, edgecolor='none',rasterized=True)
cb=plt.colorbar(sc,ax = ax1,aspect=10)
cb.formatter.set_powerlimits((0, 0))
cb.ax.set_major_formatter(ticker.FuncFormatter(myfmt))
cb.update_ticks()

最佳答案

您需要指定xaxis:

cb.ax.xaxis.set_major_formatter(plt.FuncFormatter(myfmt))

yaxis:
cb.ax.yaxis.set_major_formatter(plt.FuncFormatter(myfmt))

设置格式化程序时。

10-06 12:48
查看更多