matplotlib,组合2个单独的轴,然后绘制数据

时间:2015-10-29 22:15:46

标签: python matplotlib graph plot

我想创建个人轴,然后选择其中两个来绘制数据。例如:

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))

Click here to view the expected result

这是我的实施,当然,我对它不满意:

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)位置绘制它们,没有任何丑陋的技巧,当然还有那些轴内的绘图。

0 个答案:

没有答案