我有一个640点的数据集,但是在子图中绘制它将轴缩放到700.如何将x轴设置为0到640本身而不是缩放?
通常,如何将轴设置为仲裁措施?请解释设置轴的选项。
以下是我正在使用的代码:
self.figure = Figure()
self.figure.set_size_inches( (15,3) )
self.figure.set_dpi(80)
self.picture = self.figure.add_subplot(211)
#self.picture.xlim(xmax=640)
self.intensity = self.figure.add_subplot(212)
self.picture.imshow(pic)
#... where projection happens to be 640 px wide
self.intensity.plot(projection)
答案 0 :(得分:3)
假设我正确理解了这个问题,您可以使用Axes.set_xlim()
功能。你几乎在你的问题中做得对,但你对set_xlim
的呼吁不太正确,必须在你绘制数据之后:
import matplotlib.pyplot as plt
hf = plt.figure()
hf.set_size_inches( (15,3) )
hf.figure.set_dpi(80)
ha = hf.add_subplot(211)
pic = ...
ha.imshow(pic)
ha.set_xlim((0,640)) # This sets the x axis to range from 0 to 640.
如果您只想调整x轴的上限或下限,可以使用left
的{{1}}和right
关键字参数。例如,要将x轴的上限设置为640,但保留下限,就像你可以使用的那样
Axes.set_xlim
这里需要注意两点:
这些关键字参数与ha.set_xlim(right=640)
不同,后者接受关键字参数Axes.set_ylim
和bottom
。
这也与top
不同,matplotlib.pyplot.xlim
接受关键字参数xmin
和xmax
(这是@ tsyu80实际上正在讨论的函数)和{{ 1}},接受matplotlib.pyplot.ylim
和ymin
。
答案 1 :(得分:2)
首先要介绍一些设置代码:
import numpy as np
import matplotlib.pyplot as plt
figure, (picture, intensity) = plt.subplots(nrows=2, figsize=(15, 3))
figure.set_dpi(80)
picture.imshow(np.random.uniform(size=(5, 50)))
intensity.plot(np.random.random(size=641))
请注意,对plt.subplots
的调用(最后的s
很重要;没有s
的功能不同)需要matplotlib 1.1或更高版本。但是您的原始示例设置也可以。另请注意,轴的缩放比例为700而不是640,因为matplotlib更愿意在700处绘制一个刻度,并且表示额外的空白区域并不是一件大事。
编辑:我只是想指出figsize
参数,dpi
设置,而picture
轴与原始问题无关,但是我添加它们以匹配原始示例。
正如克里斯提到的,你可以打电话给
intensity.set_xlim((0, 640))
您可以传入关键字参数,只调整所需的参数:
intensity.set_xlim(right=640)
如果您知道需要严格的轴限制,但又不想手动设置,则轴对象可以根据绘制的数据计算出来。
intensity.autoscale(tight=True)
或者,如果您只想缩放x
- 轴:
intensity.autoscale(axis='x', tight=True)
注意autoscale
是特殊的,因为如果您的数据限制发生变化,它会重新调整(例如,如果您绘制另一个有680个点的数据集)。
或者,您可以使用margins
方法:
intensity.margins(0)
这会将 x
和y
轴限制设置为数据限制并添加指定的填充---在本例中为0.如果您确实需要一些间距在y
方向,你可以写:
intensity.margins(0, 0.1)
增加了等于y
数据间隔的10%的间距。这些功能都可以满足您的需求,但不同的呼叫签名(和行为)在不同的情况下非常有用。
编辑:根据Chris的建议将固定关键字参数设置为set_xlim
。