如何在轴的末端显示最小值和最大值

问题描述

生成如下图:

set.seed(1)
#use rowwise
df %>% 
  rowwise() %>% 
  mutate(x2 = ifelse(x == 0,sample(1:10,1),x))
#        x    x2
#    <dbl> <dbl>
#  1     1     1
#  2     2     2
#  3     3     3
#  4     0     9
#  5     5     5
#  6     0     4
#  7     7     7
#  8     8     8
#  9     9     9
# 10    10    10

Generated picture

例如,当我将值t = arange(0,21,1)更改为t = arange(0,20,1)时,例如在x轴上,最大值为19.0,我的最大值从x轴。当然,对于y轴也是如此。

Wrong picture

我的问题是如何强制matplotlib生成总是在轴上位于轴末端上的最大值的图,就像应该总是出于我的目的,还是应该像选项?

Imiage from my program in Fortan I did some years ago

我使用Matplotlib效率更高,但应该有这样的选择(上图)。

通过这种方式,我始终可以在文本窗口中观察最大最小值,也可以采取其他步骤来确保最大最小值。我想从轴上读取它们,问题是... mathplotlib中是否存在这样的可能性?如果没有,我将关闭该帖子。

Axes I am thinking about more or less

解决方法

我看到两种解决问题的方法。

将轴自动限制模式设置为舍入数字

rcParams中,您可以使用

rcParams['axes.autolimit_mode'] = 'round_numbers'

并使用最小和最大关闭手动轴限制

plt.xlim(min(t),max(t))
plt.ylim(min(s),max(s))

这将产生以下图像。尽管如此,轴的极值仍显示在最接近的“整数”处,但用户可以大致捕获数据范围限制。如果需要显示确切的值,可以从rcParams看到不能直接使用的第二个解决方案。

ticking with auto limits to round numbers

或–手动生成轴刻度线

此解决方案意味着明确要求给定的滴答数。我猜想有一种方法可以根据轴的大小等来自动执行它。但是,如果每次相同的图形大小都要处理更多或更少的内容,则可以手动确定固定的刻度数。这可以通过

完成
plt.xlim(min(t),max(s))
plt.xticks(np.linspace(t.min(),t.max(),7))  # arbitrary chosen
plt.yticks(np.linspace(s.min(),s.max(),5))  # arbitrary chosen

生成了下面的图像,与您的图像示例非常相似。

ticking manually