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瞧!你是我的英雄,谢谢巴尔加夫的格式化