在matplotlib的x轴上断开// [英] Break // in x axis of matplotlib

查看:165
本文介绍了在matplotlib的x轴上断开//的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

描述我想要实现的最好方法是使用自己的图像:

Best way to describe what I want to achieve is using my own image:

现在我在光谱图中有很多死角,尤其是在5200和6300之间.我的问题很简单,我如何添加一个类似//的漂亮的小//中断(图像从净):

Now I have a lot of dead space in the spectra plot, especially between 5200 and 6300. My question is quite simple, how would I add in a nice little // break that looks something similar to this (image lifted from the net):

我正在使用此设置进行绘图:

I'm using this setup for my plots:

nullfmt = pyplot.NullFormatter()

fig = pyplot.figure(figsize=(16,6))

gridspec_layout1= gridspec.GridSpec(2,1)
gridspec_layout1.update(left=0.05, right=0.97, hspace=0, wspace=0.018)
pyplot_top      = fig.add_subplot(gridspec_layout1[0])
pyplot_bottom   = fig.add_subplot(gridspec_layout1[1])

pyplot_top.xaxis.set_major_formatter(nullfmt)

我敢肯定,使用gridpsec可以实现这一点,但是非常感谢您详细了解如何实现此目标的高级教程.

I'm quite certain it is achievable with gridpsec but an advanced tutorial cover exactly how this is achieved would be greatly appreciated.

很抱歉,如果以前在stackoverflow上已经解决了这个问题,但是我已经广泛地研究了gridSpec的正确过程,但至今没有发现任何问题.

Apologies also if this question has been dealt with previously on stackoverflow but I have looked extensively for the correct procedure for gridSpec but found nothing as yet.

我已经设法做到了这一点,几乎在那里:

I have managed to go as far as this, pretty much there:

但是,我的折断线没有我想要的陡峭...如何更改它们? (我使用了下面的示例答案)

However, my break lines are not as steep as I would like them...how do I change them? (I have made use of the example answer below)

推荐答案

您可以改写 matplotlib示例直接在x轴上断开:

You could adapt the matplotlib example for a break in the x-axis directly:

"""
Broken axis example, where the x-axis will have a portion cut out.
"""
import matplotlib.pylab as plt
import numpy as np


x = np.linspace(0,10,100)
x[75:] = np.linspace(40,42.5,25)

y = np.sin(x)

f,(ax,ax2) = plt.subplots(1,2,sharey=True, facecolor='w')

# plot the same data on both axes
ax.plot(x, y)
ax2.plot(x, y)

ax.set_xlim(0,7.5)
ax2.set_xlim(40,42.5)

# hide the spines between ax and ax2
ax.spines['right'].set_visible(False)
ax2.spines['left'].set_visible(False)
ax.yaxis.tick_left()
ax.tick_params(labelright='off')
ax2.yaxis.tick_right()

# This looks pretty good, and was fairly painless, but you can get that
# cut-out diagonal lines look with just a bit more work. The important
# thing to know here is that in axes coordinates, which are always
# between 0-1, spine endpoints are at these locations (0,0), (0,1),
# (1,0), and (1,1).  Thus, we just need to put the diagonals in the
# appropriate corners of each of our axes, and so long as we use the
# right transform and disable clipping.

d = .015 # how big to make the diagonal lines in axes coordinates
# arguments to pass plot, just so we don't keep repeating them
kwargs = dict(transform=ax.transAxes, color='k', clip_on=False)
ax.plot((1-d,1+d), (-d,+d), **kwargs)
ax.plot((1-d,1+d),(1-d,1+d), **kwargs)

kwargs.update(transform=ax2.transAxes)  # switch to the bottom axes
ax2.plot((-d,+d), (1-d,1+d), **kwargs)
ax2.plot((-d,+d), (-d,+d), **kwargs)

# What's cool about this is that now if we vary the distance between
# ax and ax2 via f.subplots_adjust(hspace=...) or plt.subplot_tool(),
# the diagonal lines will move accordingly, and stay right at the tips
# of the spines they are 'breaking'

plt.show()

出于您的目的,只需两次绘制数据(在每个轴上分别axax2并设置xlim即可.中断线"应移动以匹配新的中断,因为它们已绘制相对轴坐标而不是数据坐标.

For your purposes, just plot your data twice (once on each axis, ax and ax2 and set your xlims appropriately. The "break lines" should move to match the new break because they are plotted in relative axis coordinates rather than data coordinates.

折线只是在一对点之间绘制的未剪裁的绘图线.例如. ax.plot((1-d,1+d), (-d,+d), **kwargs)在第一个轴上绘制点(1-d,-d)(1+d,+d)之间的折线:这是右下角的点.如果您想更改原图,请适当更改这些值.例如,要使其陡峭,请尝试ax.plot((1-d/2,1+d/2), (-d,+d), **kwargs)

The break lines are just unclipped plot lines drawn between a pair of points. E.g. ax.plot((1-d,1+d), (-d,+d), **kwargs) plots the break line between point (1-d,-d) and (1+d,+d) on the first axis: this is the bottom righthand one. If you want to change the graident, change these values appropriately. For example, to make this one steeper, try ax.plot((1-d/2,1+d/2), (-d,+d), **kwargs)

这篇关于在matplotlib的x轴上断开//的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆