python 如何自动更新ylim为nans在x由于xscale(日志)

velaa5lx  于 2023-10-14  发布在  Python
关注(0)|答案(2)|浏览(95)

我正在绘制我的数据(x,y),并希望以对数标度显示x轴。由于x中存在一些负值,因此无法计算所有值的log 10。这会导致nans在绘图时被简单地忽略(这就是我想要的)但是y轴限制不会为这些缺失值更新。
范例:

import numpy as np
import matplotlib.pyplot as plt
x = np.arange(-10, 11, 1) 
plt.plot(x,x, marker='d')

当我在x轴上加上对数标度时,负值被忽略,但y轴没有更新

x = np.arange(-10, 11, 1) 
plt.plot(x,x, marker='d')
plt.xscale('log')

当然,我可以手动设置ylim,但如果我不知道头部的确切值,那就不理想了。我很困惑matplotlib不会自动更新这个。ax.relim()ax.autoscale_view()没有帮助。任何想法/意见?

fiei3ece

fiei3ece1#

在快速浏览文档后,我建议您尝试set_ylim(bottom=0.0)set_ybound(lower=0.0)ylim(bottom=0.0)
事实上,我只添加了一行代码就可以使用你的示例:

plt.ylim(bottom=0.0)
8nuwlpux

8nuwlpux2#

我想出了如何以一种通用的方式解决这个问题:如果xscale被设置为“log”,并且x中有负值,则取x < 0的最小值的位置,并将该位置的y值设置为新的限值(理想情况下,与图中其余部分相同的边距):

margin = 0.1
if len(x[x<0]) !=0 and ax.get_xscale=='log':
    ii_x_g0 = np.min(np.where(x>0))
    ax.set_ylim(bottom = y[ii_x_g0] - y[ii_x_g0] * margin)

正如我所说的,我很惊讶matplotlib没有自动完成这一点,所以我提交了this GitHub Issue for matplotlib。让我们看看他们是怎么想的,怎么说的...

相关问题