Ich verwende Python Matplotlib zum Zeichnen von Konturen. Hier ist ein Code, den ich unten als Grundlage habe. Wenn Sie dies ausführen, werden Sie sehen, dass die Beschriftungen fast vertikal sind. Ich möchte die Etiketten horizontal ausrichten, aber ich weiß nicht, wie ich das erreichen kann. Ich habe es mit ClabelText
versucht, was die Dokumentation vorschlägt, verstehe aber nicht, wie das funktionieren soll. Ich würde mich freuen, wenn jemand eine Möglichkeit vorschlagen könnte, die Labels mit oder ohne CabelText zu orientieren.ändern Sie die Ausrichtung der Kontur clabel Textobjekte
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()
Große, genau das, was ich brauchte. Das wirft die nächste Frage auf, wie kann ich die ursprünglichen Etiketten (5.250 usw.) loswerden? Ich kann label2 löschen, aber die anderen sind noch da – user3293938