如何设置子图轴范围

2025-02-10 08:57:00
admin
原创
54
摘要:问题描述:如何将第二个子图的 y 轴范围设置为例如 [0,1000] ?我的数据的 FFT 图(文本文件中的一列)导致(inf.?)尖峰,因此实际数据不可见。pylab.ylim([0,1000]) 不幸的是,没有任何效果。这是整个脚本:# based on http://www.swharden.com/b...

问题描述:

如何将第二个子图的 y 轴范围设置为例如 [0,1000] ?我的数据的 FFT 图(文本文件中的一列)导致(inf.?)尖峰,因此实际数据不可见。

pylab.ylim([0,1000])

不幸的是,没有任何效果。这是整个脚本:

# based on http://www.swharden.com/blog/2009-01-21-signal-filtering-with-python/
import numpy, scipy, pylab, random

xs = []
rawsignal = []
with open("test.dat", 'r') as f:
    for line in f:
        if line[0] != '#' and len(line) > 0:
            xs.append( int( line.split()[0] ) )
            rawsignal.append( int( line.split()[1] ) )

h, w = 3, 1
pylab.figure(figsize=(12,9))
pylab.subplots_adjust(hspace=.7)

pylab.subplot(h,w,1)
pylab.title("Signal")
pylab.plot(xs,rawsignal)

pylab.subplot(h,w,2)
pylab.title("FFT")
fft = scipy.fft(rawsignal)
#~ pylab.axis([None,None,0,1000])
pylab.ylim([0,1000])
pylab.plot(abs(fft))

pylab.savefig("SIG.png",dpi=200)
pylab.show()

其他改进也值得赞赏!


解决方案 1:

您有pylab.ylim

pylab.ylim([0,1000])

注意:该命令必须在剧情之后执行!

2021 年更新

由于matplotlib 现在强烈不建议使用 pylab,因此您应该改用 pyplot:

from matplotlib import pyplot as plt
plt.ylim(0, 100) 
#corresponding function for the x-axis
plt.xlim(1, 1000)

解决方案 2:

使用轴对象是一种很好的方法。如果你想与多个图形和子图交互,它会很有帮助。要直接添加和操作轴对象:

import matplotlib.pyplot as plt
fig = plt.figure(figsize=(12,9))

signal_axes = fig.add_subplot(211)
signal_axes.plot(xs,rawsignal)

fft_axes = fig.add_subplot(212)
fft_axes.set_title("FFT")
fft_axes.set_autoscaley_on(False)
fft_axes.set_ylim([0,1000])
fft = scipy.fft(rawsignal)
fft_axes.plot(abs(fft))

plt.show()

解决方案 3:

有时您确实想在绘制数据之前Axes设置轴限值。在这种情况下,您可以设置或AxesSubplot对象的“自动缩放”功能。感兴趣的函数是set_autoscale_onset_autoscalex_onset_autoscaley_on

在您的例子中,您希望冻结 y 轴的限制,但允许 x 轴扩展以容纳您的数据。因此,您需要将属性更改autoscaley_onFalse。以下是您的代码中 FFT 子图片段的修改版本:

fft_axes = pylab.subplot(h,w,2)
pylab.title("FFT")
fft = scipy.fft(rawsignal)
pylab.ylim([0,1000])
fft_axes.set_autoscaley_on(False)
pylab.plot(abs(fft))

解决方案 4:

如果你有多个子图,即

fig, ax = plt.subplots(4, 2)

您可以对所有图形使用相同的 y 限值。它从第一个图中获取 y 轴的限值。

plt.setp(ax, ylim=ax[0,0].get_ylim())

解决方案 5:

也可以在向现有图形实例添加子图时设置ylim/ (承认参数)。xlim`plt.subplot`ylim=

import numpy as np
import matplotlib.pyplot as plt

xs = np.arange(1000)                             # sample data
rawsignal = np.random.rand(1000)
fft = np.fft.fft(rawsignal)

plt.figure(figsize=(9,6))                        # create figure
plt.subplots_adjust(hspace=0.4)

plt.subplot(2, 1, 1, title='Signal')             # first subplot
plt.plot(xs, rawsignal)

plt.subplot(2, 1, 2, title='FFT', ylim=(0,100))  # second subplot
#                                 ^^^^^  <---- set ylim here
plt.plot(abs(fft));

再次,使用面向对象接口更简洁、更清晰。Axes 实例定义的set()方法可用于设置一系列属性,包括 y-limit/title 等。

fig, (ax1, ax2) = plt.subplots(2, figsize=(9,6))
ax1.plot(xs, rawsignal)                # plot rawsignal in the first Axes
ax1.set(title='Signal')                # set the title of the first Axes
ax2.plot(abs(fft))                     # plot FFT in the second Axes
ax2.set(ylim=(0, 100), title='FFT');   # set title and y-limit of the second Axes

两组代码均产生相同的以下输出。

结果

解决方案 6:

如果你知道你想要的精确轴,那么

pylab.ylim([0,1000])

按照之前回答的方式工作。但是如果你想要一个更灵活的轴来适应你的精确数据,就像我在发现这个问题时做的那样,那么将轴限制设置为数据集的长度。如果你的数据集和fft问题中的一样,那么在你的绘图命令后添加这个:

`length = (len(fft))
pylab.ylim([0,length])`

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用