python - matplotlib中的移动轴指数

标签 python matplotlib plot

我想在我的子图的顶部和底部(或左侧和右侧)生成带有轴标签的图。其他帖子详细介绍了我如何移动轴标签(例如,here)。

但是,我对科学记数法中的指数有疑问。一个最小的工作示例最好地说明了这个问题:

import numpy as np
import matplotlib.pyplot as plt

vars = 4
length = 10000

array = np.zeros((length, vars))
array[:,0] = np.random.normal(0.0, 1.0e6, (length))
array[:,1] = 1.0e6 * np.tanh(array[:,0]/1.0e6)
array[:,2] = 1.0e5 * np.random.random((length))
array[:,3] = array[:,1] * array[:,2] / 1.0e5

labels = ["var1", "var2", "var3", "var4"]

plt.figure(figsize=(15, 15))

for i in range(vars):
    for j in range(0, vars):
        ax = plt.subplot(vars, vars, vars*i + j + 1)
        ax.xaxis.get_major_formatter().set_powerlimits((-2, 3))
        ax.yaxis.get_major_formatter().set_powerlimits((-2, 3))
        ax.locator_params(nbins=5)

        if (j == i):
            weights = np.ones_like(array[:,i])/len(array[:,i])
            ax.hist(array[:,i], 25, weights=weights)
        else:
            ax.plot(array[:,j], array[:,i], '.', markersize=0.5)

        if ((j == 0) & (i % 2 == 0)):
            ax.yaxis.tick_left()
            ax.xaxis.set_ticks_position("both")
            ax.yaxis.set_label_position("left")
            ax.get_yaxis().get_offset_text().offset_text_position = "left"
            ax.set_ylabel(labels[i])
        elif ((j == vars - 1) & (i % 2 == 1)):
            ax.yaxis.tick_right()
            ax.xaxis.set_ticks_position("both")
            ax.yaxis.set_label_position("right")
            ax.get_yaxis().get_offset_text().offset_text_position = "right"
            ax.set_ylabel(labels[i])
        else:
            ax.get_yaxis().set_ticklabels([])

        if ((i == 0) & (j % 2 == 1)):
            ax.xaxis.tick_top()
            ax.xaxis.set_ticks_position("both")
            ax.xaxis.set_label_position("top")
            ax.get_xaxis().get_offset_text().offset_text_position = "top"
            ax.set_xlabel(labels[j])
        elif ((i == vars - 1) & (j % 2 == 0)):
            ax.xaxis.tick_bottom()
            ax.xaxis.set_ticks_position("both")
            ax.xaxis.set_label_position("bottom")
            ax.get_xaxis().get_offset_text().offset_text_position = "bottom"
            ax.set_xlabel(labels[j])
        else:
            ax.get_xaxis().set_ticklabels([])

plt.savefig("test.png")

这会产生: enter image description here

如您所见,指数并没有随着其他价格变动而移动。我试过了

ax.get_yaxis().get_offset_text().offset_text_position = "right"

ax.get_xaxis().get_offset_text().offset_text_position = "top"

但他们似乎没有任何作用。

最佳答案

这是 Joe Klington 报告的错误: https://github.com/matplotlib/matplotlib/issues/4476 如果您查看该链接,似乎有一种解决方法可以将文本定位到您想要的位置,但这并不简单。

关于python - matplotlib中的移动轴指数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30460399/

相关文章:

python - 在 matplotlib 中创建堆叠柱面条形图

python - 如何使用 plotnine 库在 Python 中绘制函数图

Python 错误捕获和 FTP

python - 从重复数组中绘制 python 绘图

python - Canny边缘检测后如何填充字母中的空白

python - 如何使用 matplotlib 为所有子图设置默认颜色循环?

python - Matplotlib Specgram 得到与 Matlab 相同的结果

Python dateutil.parser 抛出 "ValueError: day is out of range for month"

python - 绘制带宽上的标准差与平均值的比率

r - 在单个图中绘制多个表