Matplotlib-更改自动轴范围 - python

我将自动轴范围用于数据。

例如,当我使用-29到+31之间的x数据时,

ax = plt.gca()
xsta, xend = ax.get_xlim()

我得到-30和40,这不能正确描述数据范围。我希望看到轴范围四舍五入为5,即极限为-30和35。

有可能这样做吗?或者,是否有可能获取x轴数据的精确范围(-29,31),然后编写算法手动更改该值(使用set_xlim)?

感谢帮助。

参考方案

首先,让我们建立一个简单的示例:

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.plot([-29, 31], [-29, 31])
plt.show()

Matplotlib-更改自动轴范围 - python

如果您想了解用于手动指定事物的数据范围,可以使用:

ax.xaxis.get_data_interval()
ax.yaxis.get_data_interval()

但是,通常希望更改为简单的数据限制填充。在这种情况下,请使用ax.margins(some_percentage)。例如,这将使用数据范围的5%来填充限制:

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.plot([-29, 31], [-29, 31])
ax.margins(0.05)
plt.show()

Matplotlib-更改自动轴范围 - python

回到原始情况,您可以手动使轴限制仅使用5的倍数(但不更改刻度,等等):

import numpy as np
import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.plot([-29, 31], [-29, 31])

multiplier = 5.0
for axis, setter in [(ax.xaxis, ax.set_xlim), (ax.yaxis, ax.set_ylim)]:
    vmin, vmax = axis.get_data_interval()
    vmin = multiplier * np.floor(vmin / multiplier)
    vmax = multiplier * np.ceil(vmax / multiplier)
    setter([vmin, vmax])

plt.show()

Matplotlib-更改自动轴范围 - python

我们还可以通过将每个轴的定位器子类化来完成相同的事情:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import AutoLocator

class MyLocator(AutoLocator):
    def view_limits(self, vmin, vmax):
        multiplier = 5.0
        vmin = multiplier * np.floor(vmin / multiplier)
        vmax = multiplier * np.ceil(vmax / multiplier)
        return vmin, vmax

fig, ax = plt.subplots()
ax.plot([-29, 31], [-29, 31])

ax.xaxis.set_major_locator(MyLocator())
ax.yaxis.set_major_locator(MyLocator())
ax.autoscale()

plt.show()

Matplotlib-固定x轴缩放比例和自动缩放y轴 - python

我只想绘制部分数组,固定x部分,但让y部分自动缩放。我尝试如下所示,但是它不起作用。有什么建议么?import numpy as np import matplotlib.pyplot as plt data=[np.arange(0,101,1),300-0.1*np.arange(0,101,1)] plt.figure() plt.scatter(da…

Matplotlib:保存图形时白色边距和隐藏轴 - python

我一直在尝试保存用matplotlib制作的图,但遇到了一些问题:不仅遇到了常见的白色边距问题(我在网上找到了一些解决方案),而且看来我的坐标轴和标签都在当我保存图像时,它们消失了,尽管当我要求Python show()结果时它们看起来很好。这是MWE,是我用show()得到的结果的打印屏幕(这是我想要的结果),以及将图形保存到.png时得到的结果(我相信白…

减少matplotlib图中的左右边距 - python

我正在努力处理matplotlib中的地块边距。我使用下面的代码来生成图表:plt.imshow(g) c = plt.colorbar() c.set_label("Number of Slabs") plt.savefig("OutputToUse.png") 但是,我得到了一个在绘图的两边都有很多空白的输出图形。…

如何在matplotlib中将轴标签对齐到右侧或顶部 - python

默认情况下,matplotlib将轴标签绘制在轴的中心。我想以水平轴和垂直轴都与轴的末端对齐的方式移动标签。例如,对于水平轴,我希望看到:+--------------------+ | | | | | | | | | | +--------------------+ label 是否可以通过matplotlib的全局设置来执行此操作? python大神给出…

更改散点图中不同虚拟值的点的颜色 - python

在我的数据集中,我有一个Price列用于房价,还有5个虚拟列用于城市中的不同位置。我要做的是用不同的颜色在散点图上显示数据点。例如,在一个包含所有房屋价格的散点图上,我想要:当dummy1表示房屋位于Area1等于1时,所有价格点均为红色。当dummy2表示房屋位于Area2等于2时,所有价格点均为蓝色。依此类推,直到最后一列。如何创建该图?我可以使用plt…