如何在matplotlib中的曲线上添加刻度注释?例如,假设我想生成此。
我希望显示值(520,540,560,...)以及" ticks" (那些垂直于曲线的小线段)。有一个简单的方法吗? (假设我有一个3元组(x,y,波长)列表作为np.ndarray
。)
以下是一些示例代码和数据,可以下载cc2012xyz2_5_5dp.csv
文件here(从http://www.cvrl.org访问)。
import numpy as np
import matplotlib.pyplot as plt
with open("cc2012xyz2_5_5dp.csv", 'r') as f:
lines = f.readlines()
horseshoe = np.array([[float(v) for v in l.strip().split(',')] for l in lines])
plt.plot(horseshoe[:,1], horseshoe[:,2])
for i in xrange(14, 47, 4):
plt.annotate(str(horseshoe[i,0]), xy=horseshoe[i,1:3])
plt.show()
答案 0 :(得分:1)
我认为您需要自己绘制所有刻度,这是一个示例,它有很多代码。
我将Axes的方面设置为"等于"否则很难绘制垂直于曲线的刻度线:
import pandas as pd
df = pd.read_csv("cc2012xyz2_5_5dp.csv", header=None)
Labels = df[0].values
X0 = df[1].values
Y0 = df[2].values
ax = plt.gca()
plt.plot(X0, Y0)
ax.set_aspect("equal")
tick_len = 0.015
text_offset = 0.06
idx = np.arange(14, 47, 4)
x, y = X0[idx], Y0[idx]
xp, yp = X0[idx-1], Y0[idx-1]
xn, yn = X0[idx+1], Y0[idx+1]
labels = Labels[idx]
angle = np.arctan2(yn-yp, xn-xp) + np.pi / 2
x1, y1 = x + tick_len*np.cos(angle), y + tick_len*np.sin(angle)
x2, y2 = x + text_offset*np.cos(angle), y + text_offset*np.sin(angle)
from matplotlib.collections import LineCollection
tick_lines = LineCollection(np.c_[x, y, x1, y1].reshape(-1, 2, 2), color="k", lw=1)
ax.add_collection(tick_lines)
for i in range(len(idx)):
plt.text(x2[i], y2[i], str(labels[i]), va="center", ha="center")
ax.set_xlim(-0.1, 0.8)
ax.set_ylim(0, 1.0)
输出:
答案 1 :(得分:0)