Sto usando Python Matplotlib per tracciare i contorni. Ecco un codice che ho sotto come base. Se lo fai, vedrai che le etichette sono quasi verticali. Mi piacerebbe avere le etichette orientate orizzontalmente, ma non ho idea di come sia possibile ottenere questo risultato. Ho provato con ClabelText
, che la documentazione suggerisce, ma non capisco come questo dovrebbe funzionare. Sarei grato se qualcuno potesse suggerire un modo per orientare le etichette, con o senza ClabelText.cambia l'orientamento degli oggetti di testo del contorno di riferimento
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()
Grande, esattamente quello che mi serviva. Ciò richiede la prossima domanda, come posso sbarazzarmi delle etichette originali (5.250 e così via)? Posso cancellare label2, ma gli altri sono ancora lì – user3293938