更改轮廓标签文本对象的方向

2023-12-21

我正在使用 Python Matplotlib 绘制轮廓。这是我下面的一些代码作为基础。如果运行此命令,您会发现标签几乎是垂直的。我想让标签水平放置,但我不知道如何实现这一点。我尝试过ClabelText,文档建议,但不明白这是如何工作的。如果有人能建议一种定位标签的方法(无论是否带有 ClabelText),我将不胜感激。

import itertools as it
import numpy as np
from matplotlib.ticker import FuncFormatter
from matplotlib.contour import ClabelText
import matplotlib.pyplot as plt
from math import pi, log 

def getTime(data):
    M = data['weight']
    Tei  = data['temp']
    Twasser = 99.8
    Teikl = 86.0  ## max allowed temp
    k = 0.262 ## estimate was 0.3 W/(m.K),
    Crho = 3.18 # (KJ/kgC)
    const = pow(Crho, 1.0/3) / (pi*pi*k*pow(4*pi/3,2.0/3))
    Tval = const*pow(M,2.0/3)*log(0.76*(Tei-Twasser)/(Teikl-Twasser))
    return Tval # coo time in minutes

def contourFmt(val, posn):
    mins = int(val // 1)
    secs = int(val % 1 *60)
    return '{0:d}mm{1:d}ss'.format(mins, secs)

def labeler(val): #is this any use??
    print(val)
    return

#weights = np.array(range(40, 80, 5))*1.0
#temps = np.array(range(0, 30, 5))*1.0
weights = np.arange(40.0, 80.0, 5.0)
temps = np.arange(0.0, 25.01, 5.0)

X = temps
Y = weights
Z = np.zeros((len(X), len(Y))) 
xx = [{'temp':i} for i in X]
yy = [{'weight':i} for i in Y]
plt.figure()

##zz = it.product(xx,yy)

for i, xdicts in enumerate(xx):
    for j, ydicts in enumerate(yy):
        zd = {}
        zd.update(xdicts)
        zd.update(ydicts)
        zval = getTime(zd)
        Z[i,j] = zval

times = np.arange(4.00, 6.50, 0.25)
CS = plt.contour(Y, X, Z, levels=times, colors='b')

lbl = ClabelText(labeler)
lbl.set_rotation('horizontal')
formatter = FuncFormatter(contourFmt)  
#plt.clabel(CS, inline=True, fmt=formatter, fontsize=12)
plt.clabel(CS, inline=True, use_clabeltext=True, fmt=formatter, fontsize=12)

plt.grid(True)
plt.clabel(CS, inline=1, fontsize=12)
plt.show()

您可以在创建各个标签后设置它们的旋转。标签Text对象的返回值是clabel,这样你就可以存储它们并迭代它们,使用.set_rotation(0)将它们水平定向。

将脚本的最后几行更改为:

labels1 = plt.clabel(CS, inline=True, use_clabeltext=True, fmt=formatter, fontsize=12)
labels2 = plt.clabel(CS, inline=1, fontsize=12)

for l in labels1+labels2:
    l.set_rotation(0)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

更改轮廓标签文本对象的方向 的相关文章

随机推荐