Python 如何强制图形轴为整数?

Python 如何强制图形轴为整数?,python,matplotlib,plot,integer,axes,Python,Matplotlib,Plot,Integer,Axes,我有以下代码: import matplotlib import numpy as np from matplotlib import pyplot as plt from matplotlib.ticker import MaxNLocator import math filename = "populations.txt" data = np.loadtxt(filename, usecols = 0) year = data data = np.loadtxt(filename,

我有以下代码:

import matplotlib
import numpy as np
from matplotlib import pyplot as plt
from matplotlib.ticker import MaxNLocator
import math


filename = "populations.txt"

data = np.loadtxt(filename, usecols = 0)
year = data

data = np.loadtxt(filename, usecols = 1)
hares = data

data = np.loadtxt(filename, usecols = 2)
lynxes = data

data = np.loadtxt(filename, usecols = 3)
carrots = data

fig, axes = plt.subplots(nrows=3, figsize=(10,6))

axes[0].plot(year,hares)
axes[0].set_ylim([0,80000])

axes[1].plot(year,lynxes)
axes[1].set_ylim([0,80000])

axes[2].plot(year,carrots)
axes[2].set_ylim([0,80000])

axes[0].xaxis.set_major_locator(MaxNLocator(integer=True))
populations.txt

# year  hare    lynx    carrot
1900    30e3    4e3 48300
1901    47.2e3  6.1e3   48200
1902    70.2e3  9.8e3   41500
1903    77.4e3  35.2e3  38200
1904    36.3e3  59.4e3  40600
1905    20.6e3  41.7e3  39800
1906    18.1e3  19e3    38600
1907    21.4e3  13e3    42300
1908    22e3    8.3e3   44500
1909    25.4e3  9.1e3   42100
1910    27.1e3  7.4e3   46000
1911    40.3e3  8e3 46800
1912    57e3    12.3e3  43800
1913    76.6e3  19.5e3  40900
1914    52.3e3  45.7e3  39400
1915    19.5e3  51.1e3  39000
1916    11.2e3  29.7e3  36700
1917    7.6e3   15.8e3  41800
1918    14.6e3  9.7e3   43300
1919    16.2e3  10.1e3  41300
1920    24.7e3  8.6e3   47300

如何强制x轴上的年份标签为1900到1920之间的整数(相应地保存在“年”数组中),以及为什么它们首先显示为浮点数

我试图在axes[0]图中强制执行该问题,但这似乎只是导致了其他问题。我错过了什么

理想情况下,我也不希望将1900-1920硬编码为年份跨度,因为数据集可能会增长。我如何确保np.loadtxt()从一开始就将数据保存为整数,这样就不会出现整数/浮点标签问题? 不幸的是,
dtype=np.int
没有改变任何事情


谢谢

欢迎来到Stackoverflow

如果手动指定输入,可以通过导入数学模块或仅使用
range

import math
y_vals = range(math.floor(min(0)), math.ceil(max(80000))+1)
设置
yticks
时添加
y\u vals
。我在那里添加了数学函数,以防处理其他值,这些值不是手动输入的,我以前也曾引用过。您可以同样轻松地执行
范围(08001)
,它将起作用

那么是:

axes[0].set_yticks(y_vals)
并对所有轴执行此操作。

通过以下方式解决:


那么,在读取年份时,同时执行
dtype=np.int
ax.setxticks(范围(最小(年),最大(年)+1,2)
ax.setxticks(范围(最小(年)),int(最大(年))+1,2)


谢谢!使用您的建议,我遇到了以下错误:“int”对象不可编辑。当我删除了数学函数并刚刚删除时:
x_-vals=range(1900,1921,2)轴[0]。set_-xticks(x_-vals)
它正好满足了我的需要。我非常感谢您的帮助,谢谢!)虽然-该解决方案确实需要我在一年内硬编码,因此如果数据集增长到包含更多的年份,它将无法工作…理想情况下,我可以在np.loadtxt()时强制使用int数组调用。必须有某种方法来实现。dtype=np.int似乎不起作用,但感谢您的建议!不幸的是
dtype=np.int
没有改变轴标签中的任何内容。
set\xticks
运行良好,但是如果人口数据集增加到包含更多的年份,它们不会随之改变。我宁愿不这样做rdcode年份跨度。
dtype=np.int
听起来更像我需要的,但似乎没有效果。这是个好主意,但是:'numpy.float64'对象不能解释为整数。我从中得到的收获是,需要排序的问题是如何首先防止数组成为浮点数组,特别是考虑到数据都是整数。也许有另一种加载文本文件数据的方法不默认为浮动?好吧,在读取年份时执行
dtype=np.int
,以及
ax.set\u xticks(range(min(year),max(year)+1,2)
ax.set\u xticks(range(int(min(year)),int(max(year))+1,2)
Et瞧!你是我的英雄,谢谢巴尔加夫的格式化