2016-10-18 10 views
0

私は等高線を持つプロットを[2000, 4000, 6000, 8000]に作っています。等高線は、2000.000、4000.000などとラベルが付けられています。これらの末尾のゼロをすべて取り除きたいと思います。私が今見つけることのできる最良の選択肢はここにあります:http://matplotlib.org/examples/pylab_examples/contour_label_demo.html。表示方法を制御するラベルの新しいクラスを定義し、そのクラスを使用することを提案しています。私はこれまでPythonでこのような複雑なオプションを見たことはありません。それ以上の直接的な方法はありませんか?pyplotの等高線ラベル書式の制御

ラベルのクラスを定義する例として提供されるコードです。

import matplotlib 
import numpy as np 
import matplotlib.cm as cm 
import matplotlib.mlab as mlab 
import matplotlib.ticker as ticker 
import matplotlib.pyplot as plt 

matplotlib.rcParams['xtick.direction'] = 'out' 
matplotlib.rcParams['ytick.direction'] = 'out' 

################################################## 
# Define our surface 
################################################## 
delta = 0.025 
x = np.arange(-3.0, 3.0, delta) 
y = np.arange(-2.0, 2.0, delta) 
X, Y = np.meshgrid(x, y) 
Z1 = mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0) 
Z2 = mlab.bivariate_normal(X, Y, 1.5, 0.5, 1, 1) 
# difference of Gaussians 
Z = 10.0 * (Z2 - Z1) 

################################################## 
# Make contour labels using creative float classes 
# Follows suggestion of Manuel Metz 
################################################## 
plt.figure() 

# Basic contour plot 
CS = plt.contour(X, Y, Z) 


# Define a class that forces representation of float to look a certain way 
# This remove trailing zero so '1.0' becomes '1' 
class nf(float): 
    def __repr__(self): 
     str = '%.1f' % (self.__float__(),) 
     if str[-1] == '0': 
      return '%.0f' % self.__float__() 
     else: 
      return '%.1f' % self.__float__() 

# Recast levels to new class 
CS.levels = [nf(val) for val in CS.levels] 

# Label levels with specially formatted floats 
if plt.rcParams["text.usetex"]: 
    fmt = r'%r \%%' 
else: 
    fmt = '%r %%' 
plt.clabel(CS, CS.levels, inline=True, fmt=fmt, fontsize=10) 

答えて

0

fmtパラメータは、古典的な形式の文字列または文字列にスカラーを変換呼び出し可能のいずれかであり得ます。

ファンシーな要件がない場合は、カスタムクラスの代わりにfmt='%d'を渡すことができます。

一般的なフォーマットでは、自分自身を実装する前にデフォルトのフォーマッタをmatplotlib.tickerにする必要があります。