matplotlib中的自定义对数轴缩放

时间:2017-04-18 04:10:52

标签: python matplotlib axes logarithm

我正在尝试使用math.log(1 + x)而不是通常的“log”缩放选项来缩放绘图的x轴,并且我查看了一些自定义缩放示例,但我可以'让我的工作!这是我的MWE:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame()
df['score'] = np.random.randint(0,100,1000)

fig, ax = plt.subplots(1,1)
df.boxplot(column='score', ax=ax)
q1 = df.quantile(0.25)
q3 = df.quantile(0.75)
ax.scatter(1, q1, c='k', label='Q1')
ax.text(1.1, q1, "Q1 = {0}".format(q1['score']))
ax.scatter(1, q3, c='k', label='Q3')
ax.text(1.1, q3, "Q3 = {0}".format(q3['score']))
fig.show()

1 个答案:

答案 0 :(得分:3)

比例由两个Transform类组成,每个类都需要提供transform_non_affine方法。一个类需要从数据转换为显示坐标,这将是log(a+1),另一个是反向的,需要从显示转换为数据坐标,在这种情况下是exp(a)-1

这些方法需要处理numpy数组,因此它们应该使用相应的numpy函数而不是数学包中的函数。

class CustomTransform(mtransforms.Transform):
    ....

    def transform_non_affine(self, a):
        return np.log(1+a)

class InvertedCustomTransform(mtransforms.Transform):
    ....

    def transform_non_affine(self, a):
        return np.exp(a)-1

enter image description here