【发布时间】:2015-12-18 19:00:57
【问题描述】:
我有以下形式的数据 (link):
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(代码中的 z),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来做到这一点。 -
你用的是什么版本的mpl?标签默认旋转,见matplotlib.org/examples/pylab_examples/contour_demo.html
-
我无法检查您的代码,因为您没有包含您的数据。
-
我想知道它是否与您的 rcParams 有关。特别是,看起来您可能正在使用 TeX 呈现文本。你试过设置
plt.rcParams['text.usetex'] = False吗?
标签: python matplotlib plot contour