跳转到主要内容

创建断裂轴

项目描述

brokenaxes

brokenaxes logo. Reference: http://www.brianhensley.net/2012/02/python-controlling-spi-bus-on.html

brokenaxes使matplotlib图表在轴上有断裂,以便显示跨越不连续范围的数值。

PyPI PyPI - Downloads codecov

功能

  • 断裂x和y轴。
  • 支持单个轴上的多个断裂。
  • 根据相对范围自动缩放轴。
  • 绘制多条线。
  • 带有相对于整个断裂轴对象的定位的图例
  • 将x和y标签居中对齐到整个图表
  • 使用matplotlib.GridSpec.subplot_spec将brokenaxes对象本身作为子图。
  • xlims和ylims可以是datetime.datetime对象
  • 支持对数刻度。

安装

我推荐Anaconda Python发行版,并且这个包可以通过PyPI获得

pip install brokenaxes

使用方法

import matplotlib.pyplot as plt
from brokenaxes import brokenaxes
import numpy as np

fig = plt.figure(figsize=(5, 2))
bax = brokenaxes(xlims=((0, .1), (.4, .7)), ylims=((-1, .7), (.79, 1)), hspace=.05)
x = np.linspace(0, 1, 100)
bax.plot(x, np.sin(10 * x), label='sin')
bax.plot(x, np.cos(10 * x), label='cos')
bax.legend(loc=3)
bax.set_xlabel('time')
bax.set_ylabel('value')

example1

创建子图

from brokenaxes import brokenaxes
from matplotlib.gridspec import GridSpec
import numpy as np

sps1, sps2 = GridSpec(2,1)

bax = brokenaxes(xlims=((.1, .3), (.7, .8)), subplot_spec=sps1)
x = np.linspace(0, 1, 100)
bax.plot(x, np.sin(x*30), ls=':', color='m')

x = np.random.poisson(3, 1000)
bax = brokenaxes(xlims=((0, 2.5), (3, 6)), subplot_spec=sps2)
bax.hist(x, histtype='bar')

example2

对数刻度

import matplotlib.pyplot as plt
from brokenaxes import brokenaxes
import numpy as np

fig = plt.figure(figsize=(5, 5))
bax = brokenaxes(
    xlims=((1, 500), (600, 10000)),
    ylims=((1, 500), (600, 10000)),
    hspace=.15,
    xscale='log',
    yscale='log',
)

x = np.logspace(0.0, 4, 100)
bax.loglog(x, x, label='$y=x=10^{0}$ to $10^{4}$')

bax.legend(loc='best')
bax.grid(axis='both', which='major', ls='-')
bax.grid(axis='both', which='minor', ls='--', alpha=0.4)
bax.set_xlabel('x')
bax.set_ylabel('y')
plt.show()

example3

datetime

import matplotlib.pyplot as plt
from brokenaxes import brokenaxes
import numpy as np
import datetime

fig = plt.figure(figsize=(5, 5))
xx = [datetime.datetime(2020, 1, x) for x in range(1, 20)]

yy = np.arange(1, 20)

bax = brokenaxes(
    xlims=(
        (
            datetime.datetime(2020, 1, 1),
            datetime.datetime(2020, 1, 3),
        ),
        (
            datetime.datetime(2020, 1, 6),
            datetime.datetime(2020, 1, 20),
        )
    )
)

bax.plot(xx, yy)

fig.autofmt_xdate()
[x.remove() for x in bax.diag_handles]
bax.draw_diags()

import matplotlib.dates as mdates
for ax in bax.axs:
    ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%b-%d'))

datetime_example

文本注释

import matplotlib.pyplot as plt
from brokenaxes import brokenaxes

fig = plt.figure(figsize=(5, 5))
bax = brokenaxes(
    xlims=((0, 0.1), (0.4, 0.7)), ylims=((-1, 0.7), (0.79, 1))
)
bax.text(0.5, 0.5, "hello")

text_example

我能做更多吗?

您可以在上述支持的特性之外自定义 brokenaxes。Brokenaxes 通过创建多个较小的坐标轴对象来工作,这些对象的坐标和大小由构造函数中使用的日期范围决定。这些单独的坐标轴被存储在 bax.axs 的列表中。大多数自定义都需要访问这些内部坐标轴对象。(参见 日期示例 的最后两行)。还有一个较大的不可见坐标轴对象 bax.big_ax,它跨越整个 brokenaxes 区域,用于处理跨越所有较小坐标轴的 x 和 y 轴标签。

画廊

如果您使用这个工具制作了一个令您自豪的图表,请发送给我 png 和代码,我将将其添加到画廊中!

生活建议

请明智地使用此工具。任何数据可视化技术都可以用来阐明数据中的趋势,但也可以用来操纵和误导。后一种情况对于 broken axes 图表尤其如此,因此请尽量负责任地使用它们。除此之外,此软件免费使用。有关详细信息,请参阅许可文件。

测试

brokenaxes 使用 pytest-mpl 确保图表正确创建。

要从根目录运行以测试图表是否正确创建,请运行 pytest --mpl --mpl-baseline-path test_baseline test.py

要从根目录生成新的测试图表,请运行 pytest --mpl-generate-path test_baseline test.py

如果您在无头服务器上运行测试,可能需要将 MPLBACKEND 环境变量设置为 Agg。

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分布

brokenaxes-0.6.2.tar.gz (9.8 kB 查看散列

上传时间

构建分布

brokenaxes-0.6.2-py3-none-any.whl (7.3 kB 查看散列

上传时间 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面