Change the orientation of outline text objects

I use Python Matplotlib to build paths. Here is some code that I have below as a basis. If you run this, you will see that the labels are almost vertical. I would like the labels to be oriented horizontally, but I have no idea how this can be achieved. I tried with ClabelText , which offers documentation, but don't understand how this should work. I would appreciate it if someone could suggest a way to orient labels, either with or without 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/(mK), 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() 
+5
source share
1 answer

You can set the rotation of individual labels after they are created. Label Text objects are returned by clabel , so you can store and .set_rotation(0) over them with .set_rotation(0) to orient them horizontally.

Change the last few lines of your script to:

 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) 

enter image description here

+2
source

Source: https://habr.com/ru/post/1243396/


All Articles