小能豆

我如何将 plt.plot x 轴从 0 更改为实际值?

py

你好。我现在正在根据年份和数字字典数据绘制线图。当我尝试使用 matplotlib.pyplot 绘制线图时,其轴始终固定为 0。

例如,我想从字典中绘制图表( year_counts= {‘2013’:7, ‘2014’:20, ‘2015’:10, ‘2016’:37, ‘2017’:1})。但是它的轴从 0 开始并增加 1。即使我设置了 x 限制,plt.xlim(xmin=int(years[0])) plt.axis([int(years[0]), int(years[-1]), 0, max(book_counts)]) 也不起作用。

我怎样才能以 2013 年开始 X 轴?

这是我使用的代码

year_counts=  {'2013':7, '2014':20, '2015':10, '2016':37, '2017':1}

years = sorted(year_counts)
book_counts = [year_counts[year] for year in years]
plt.plot(years, book_counts)
plt.xlim(xmin=int(years[0])) # didn't work
plt.axis([int(years[0]), int(years[-1]), 0, max(book_counts)]) # didn't work
plt.show()

阅读 34

收藏
2024-11-07

共1个答案

小能豆

在使用 matplotlib.pyplot 绘制线图时,X 轴默认情况下可能会将字符串类型的数据作为类别处理,从而导致 X 轴显示为 0, 1, 2 等类别编号,而不是您想要的年份刻度。为了解决这个问题,可以将年份转换为整数类型,确保 Matplotlib 将它们作为数值而不是类别来处理。

您可以对代码做一些简单的修改,确保年份被解释为数值数据。以下是改进后的代码:

import matplotlib.pyplot as plt

# 数据
year_counts = {'2013':7, '2014':20, '2015':10, '2016':37, '2017':1}

# 将年份转换为整数
years = sorted([int(year) for year in year_counts])  # 将年份转换为整数
book_counts = [year_counts[str(year)] for year in years]  # 获取对应的值

# 绘制图形
plt.plot(years, book_counts, marker='o')  # 添加 marker='o' 使数据点更加明显
plt.xlim(min(years), max(years))  # 设置 X 轴范围
plt.ylim(0, max(book_counts) + 5)  # 设置 Y 轴范围,加5确保数据不会太贴近顶端

plt.xlabel('Year')  # 设置 X 轴标签
plt.ylabel('Count')  # 设置 Y 轴标签
plt.title('Yearly Counts')  # 设置图形标题

plt.show()

代码解释

  • 年份转换years 中的年份已被转换为整数,确保它们在 X 轴上作为数值类型显示。
  • marker='o':给数据点加上标记,使得每个点在图上更加明显。
  • 设置 xlimylimplt.xlimplt.ylim 设置了 X 轴和 Y 轴的显示范围。将 ylim 的上限稍微增大一点 (max(book_counts) + 5),避免数据点贴近图表顶部。

这样,X 轴应会正确显示为 2013 到 2017 的年份刻度。

2024-11-07