我想创建个人轴,然后选择其中两个来绘制数据。例如:
x_axis = XAxis(fig, position=(0.2, 0.1), length=0.7)
y_axis = YAxis(fig, position=(0.1, 0.2), length=0.7)
plot_within_axes(fig, x_axis, y_axis, np.random.random_sample(5))
这是我的实施,当然,我对它不满意:
import random
import numpy as np
import matplotlib.pyplot as plt
class XAxis:
def __init__(self, figure, position, length):
self.position = position
self.length = length
axes = figure.add_axes([position[0], position[1], length, 0.1])
axes.spines['top'].set_visible(False)
axes.spines['left'].set_visible(False)
axes.spines['right'].set_visible(False)
axes.xaxis.set_ticks_position('bottom')
axes.set_yticks([])
axes.patch.set_alpha(0)
self.axes = axes
class YAxis:
def __init__(self, figure, position, length):
self.position = position
self.length = length
axes = fig.add_axes([position[0], position[1], 0.1, length])
axes.spines['top'].set_visible(False)
axes.spines['bottom'].set_visible(False)
axes.spines['right'].set_visible(False)
axes.yaxis.set_ticks_position('left')
axes.set_xticks([])
axes.patch.set_alpha(0)
self.axes = axes
def plot_within_axes(figure, x_axis, y_axis, values):
axes = fig.add_axes([x_axis.position[0], y_axis.position[1], x_axis.length, y_axis.length])
x_limits = x_axis.axes.get_xlim()
axes.plot(np.linspace(x_limits[0], x_limits[1], len(values), endpoint=True), values)
axes.set_ylim(y_axis.axes.get_ylim())
axes.set_xticks([])
axes.set_yticks([])
axes.patch.set_alpha(0)
fig = plt.figure()
x_axis = XAxis(fig, position=(0.2, 0.1), length=0.7)
y_axis = YAxis(fig, position=(0.1, 0.2), length=0.7)
plot_within_axes(fig, x_axis, y_axis, np.random.random_sample(5))
fig.patch.set_facecolor('white')
plt.show()
(我使用2个绘图区绘制2个轴,我隐藏了不必要的刺,不需要的刻度,不需要的背景,我使用第3个绘图区绘制我的数据,这是一个非常难看的技巧)
我不知道是否可以使用matplotlib处理个人轴。对我来说,轴是直线,但对于matplotlib,绘制单个轴是没有意义的。
是否可以使用matplotlib低级原语来实现?
我的最终目标是创建一个应用程序来处理轴,在任何(x,y)位置绘制它们,没有任何丑陋的技巧,当然还有那些轴内的绘图。