【问题标题】:Set Xticks frequency to dataframe index将 Xticks 频率设置为数据帧索引
【发布时间】:2017-10-15 13:31:40
【问题描述】:

我目前有一个数据框,其索引为 1990 年至 2014 年(25 行)。我希望我的情节具有显示所有年份的 X 轴。我正在使用 add_subplot,因为我计划在这个图中有 4 个图(它们都具有相同的 X 轴)。

创建数据框:

import pandas as pd
import numpy as np

index = np.arange(1990,2015,1)
columns = ['Total Population','Urban Population']

pop_plot = pd.DataFrame(index=index, columns=columns)
pop_plot = df_.fillna(0)

pop_plot['Total Population'] = np.arange(150,175,1)
pop_plot['Urban Population'] = np.arange(50,125,3)

我目前拥有的代码:

fig = plt.figure(figsize=(10,5))
ax1 = fig.add_subplot(2,2,1, xticklabels=pop_plot.index)
plt.subplot(2, 2, 1)

plt.plot(pop_plot)
legend = plt.legend(pop_plot, bbox_to_anchor=(0.1, 1, 0.8, .45), loc=3, ncol=1, mode='expand')
legend.get_frame().set_alpha(0)

ax1.set_xticks(range(len(pop_plot.index)))

这是我得到的情节:

当我评论 set_xticks 时,我得到以下情节:

#ax1.set_xticks(range(len(pop_plot.index)))

我尝试了几个在这里找到的答案,但都没有成功。

提前致谢。

【问题讨论】:

  • 你为什么期望range(len()) 会给出从 1900 开始的值?
  • 我不会。标签由 xticklabels=pop_plot.index 提供。
  • 我不确定我能否理解这个问题。根据您的回复,我根本不了解ax1.set_xticks(range(len(pop_plot.index)) 的预期功能。此外,如果不查看数据,就无法了解为什么您没有获得完整的年份。
  • 很抱歉不清楚,英语不是我的主要语言。向您展示我的数据的最佳方式是什么?它是一个 csv 文件。从我读到的 ax1.set_xticks(range(len(pop_plot.index)) 将能够将 X 轴上的刻度数设置为与我的索引相同的长度。我想展示这些年来人口的变化情况。目前我只有 6 年的标签,但我希望它们都显示在图中。通过删除 xticklabels=pop_plot.index,X 轴上的标签更改为:1990、1995、2000、2005、2010 和 2015。范围是正确的,但仍然只显示了六个值。
  • 通常您应该提供MCVE。在这种情况下,可能只是我没有抓住问题,但最好你可以发布一个可以在本地运行的示例来说明问题。

标签: python pandas matplotlib plot


【解决方案1】:

不清楚ax1.set_xticks(range(len(pop_plot.index))) 应该用于什么。它将刻度设置为数字 0、1、2、3 等,而您的绘图范围应为 1990 年至 2014 年。

相反,您想将刻度设置为数据的数字:

ax1.set_xticks(pop_plot.index)

完整的更正示例:

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

index = np.arange(1990,2015,1)
columns = ['Total Population','Urban Population']

pop_plot = pd.DataFrame(index=index, columns=columns)

pop_plot['Total Population'] = np.arange(150,175,1)
pop_plot['Urban Population'] = np.arange(50,125,3)


fig = plt.figure(figsize=(10,5))
ax1 = fig.add_subplot(2,2,1)

ax1.plot(pop_plot)
legend = ax1.legend(pop_plot, bbox_to_anchor=(0.1, 1, 0.8, .45), loc=3, ncol=1, mode='expand')
legend.get_frame().set_alpha(0)

ax1.set_xticks(pop_plot.index)
plt.show()

【讨论】:

  • 我不记得我是怎么做到的,但是使用你的答案它工作得很好。谢谢。
猜你喜欢
  • 2017-09-28
  • 2023-01-13
  • 2021-07-09
  • 1970-01-01
  • 2014-05-25
  • 1970-01-01
  • 2019-04-03
  • 2014-02-12
  • 2022-09-27
相关资源
最近更新 更多