У меня есть данные (link) вида приведены ниже:Как повернуть метки, чтобы следовать контурам в Python?
Y X 0 X 10 X 20
15 4.83 4.91 4.99
20 4.58 4.65 4.73
25 4.43 4.49 4.56
Я пытаюсь построить контуры X метка ценности, в этих случаях 0, 10, 20 (как г в коде) с по оси X как значения X и оси y как значения Y. Графики создаются с помощью кода:
import numpy as np
import re
from matplotlib.backends.backend_pdf import PdfPages
import matplotlib.pyplot as plt
import matplotlib.cm as cm
with open('contour.dat', "r") as data:
while True:
line = data.readline()
if not line.startswith('#'):
break
data_header = [i for i in line.strip().split('\t') if i]
_data_ = np.genfromtxt('contour.dat', skiprows = 2, delimiter = '\t')
x = _data_[:, 0]
y = _data_[:, 1:]
y_n = []
for i in range(len(data_header)):
if data_header[i][0] == 'X':
y_n = np.int_(np.append(y_n, i))
y_index = [data_header[i] for i in y_n]
z = []
for i in range(0, len(data_header)):
z = np.append(z, re.findall(r"[-+]?\d*\.\d+|\d+", data_header[i]))
z = z.reshape(len(z), 1)
xm = np.tile(x, 21)
xm = np.reshape(xm,(21, 10)).T
zm = np.tile(z, 10).T
with PdfPages('./on_tau.pdf') as p_tau:
_p_vs_tau_ = plt.figure(figsize=(5, 5))
_p_vs_tau_.clf()
p_vs_tau = plt.subplot(111)
# x, y = np.meshgrid(x, y)
surf = plt.contourf(y, xm, zm, 22, rstride=1, cstride=1, cmap=cm.gist_heat,
linewidth=0, antialiased=False, alpha = 1.0)
surf1 = plt.contour(y, xm, zm, 22, colors = '#000000',
linewidths=0.5, antialiased=False, alpha = 1.0)
plt.clabel(surf1, inline=1, fontsize=6)
plt.xlim([5, 10])
p_tau.savefig(bbox_inches='tight')
plt.close()
Я пытаюсь решить следующие вопросы:
1. В настоящее время все контурные наклейки вертикально. Как я могу повернуть метки , чтобы следовать контурам?
2. Как изменить положение меток так, чтобы они не перекрывались (как показано на рисунке)?
Дополнительный вопрос
3. Как обеспечить, чтобы этикетки всегда отображаются на участках, даже если ось пределы изменяются?
Самый простой вариант может расположить этикетки вручную с помощью мыши. Вы можете сделать это, передав 'manual = True' в [' plt.clabel'] (http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.clabel). –
Какую версию mpl вы используете? Метка должна вращаться по умолчанию, см. Http://matplotlib.org/examples/pylab_examples/contour_demo.html – tacaswell
Версия 1.4.3. –