Matplotlib -在图形中显示轴中断//

rqqzpn5f  于 2023-03-09  发布在  其他
关注(0)|答案(2)|浏览(191)

我试图重现下面情节的外观:

轴本身的断开非常简单,如下所述:https://matplotlib.org/stable/gallery/subplots_axes_and_figures/broken_axis.html
但是我不知道如何在图中包含//断点,有什么想法吗?
下面是它目前与我的数据的外观。

ulydmbyx

ulydmbyx1#

brokenaxes是完美的轴中断,因为你知道,但它似乎没有功能,这在一个已发布的包。但我已经找到了如何实现你正在寻找的。
首先从终端中的环境目录安装软件包:

>>> pip install brokenaxes

>>> conda install -c conda-forge brokenaxes

解决方案:

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

x_min    = 0
x_break  = 3
gap      = .1
x_max    = 6

def f(x):
    return np.cos(x)

fig  = plt.figure(figsize=(10,4))
brax = brokenaxes(xlims=((x_min, x_break), (x_break+gap, x_max)), hspace=gap)
xs   = np.linspace(x_min, x_max, 150)

brax.plot(xs, f(xs))
brax.annotate(u'—', (x_break-0.001, f(x_break)), rotation=45, size=25, ha='center', va='center', c='C0')
brax.annotate(u'—', (x_break+gap, f(x_break)), rotation=45, size=25, ha='center', va='center', c='C0')

plt.show()

如果从现有数组绘图,函数f可以从数组索引中检索这些值。

vql8enpb

vql8enpb2#

使用示例链接https://matplotlib.org/stable/gallery/subplots_axes_and_figures/broken_axis.html来实现您的目标:

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(19680801)

# creat data points
x = np.arange(20)+1
pts = x/x

# If we were to simply plot pts, we'd lose most of the interesting
# details due to the outliers. So let's 'break' or 'cut-out' the y-axis
# into two portions - use the top (ax1) for the outliers, and the bottom
# (ax2) for the details of the majority of our data
fig, (ax1, ax2) = plt.subplots(1, 2, sharey=True)
fig.subplots_adjust(hspace=0.05)  # adjust space between axes

# plot the same data on both axes
ax1.plot(x, pts)
ax2.plot(x, pts)

# zoom-in / limit the view to different portions of the data
ax1.set_xlim(0, 10)  # left part plot
ax2.set_xlim(11, 19)  # right part plot

# hide the spines between ax and ax2
ax1.spines['right'].set_visible(False)
ax2.spines['left'].set_visible(False)
#ax1.xaxis.tick_top()
#ax1.tick_params(labeltop=False)  # don't put tick labels at the top
ax2.yaxis.tick_right()

# Now, let's turn towards the cut-out slanted lines.
# We create line objects in axes coordinates, in which (0,0), (0,1),
# (1,0), and (1,1) are the four corners of the axes.
# The slanted lines themselves are markers at those locations, such that the
# lines keep their angle and position, independent of the axes size or scale
# Finally, we need to disable clipping.

d = .9  # proportion of vertical to horizontal extent of the slanted line
kwargs = dict(marker=[(-1, -d), (1, d)], markersize=12,
              linestyle="none", color='k', mec='k', mew=1, clip_on=False)
ax1.plot([1, 1], [0, 1], transform=ax1.transAxes, **kwargs)
ax2.plot([0, 0], [0, 1], transform=ax2.transAxes, **kwargs)

# add slanted line on the graph
ax1.plot([1], [0.5], transform=ax1.transAxes, **kwargs)
ax2.plot([0], [0.5], transform=ax2.transAxes, **kwargs) 
#fig.savefig('_')

plt.show()

结果如

相关问题