python - 如何更改 Pandas DataFrame 面积图上的年份间隔?

标签 python pandas matplotlib

import pandas as pd
import numpy as np

import matplotlib.pyplot as plt
import matplotlib.dates as dts


def use_matplot():

    ax = df.plot(x='year', kind="area" )

    years = dts.YearLocator(20)
    ax.xaxis.set_major_locator(years)

    fig = ax.get_figure()
    fig.savefig('output.pdf')


dates = np.arange(1990,2061, 1)
dates = dates.astype('str').astype('datetime64')

df = pd.DataFrame(np.random.randint(0, dates.size, size=(dates.size,3)), columns=list('ABC'))
df['year'] = dates

cols = df.columns.tolist()
cols = [cols[-1]] + cols[:-1]
df = df[cols]

use_matplot()

在上面的代码中,当我尝试设置 YearLocator 以确保 X 轴每 20 年都有一个年份标签时,出现错误“ValueError:year 0 is out of range”。默认情况下,绘图每 10 年显示一次年份。我究竟做错了什么?期望的结果只是一个底部有 1990 年、2010 年、2030 年、2050 年的图。 (而不是默认的1990年、2000年、2010年等)

最佳答案

由于年份是简单的数字,因此您可以选择根本不将它们用作日期并保留它们作为数字。

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

dates = np.arange(1990,2061, 1)

df = pd.DataFrame(np.random.randint(0,dates.size,size=(dates.size,3)),columns=list('ABC'))
df['year'] = dates

cols = df.columns.tolist()
cols = [cols[-1]] + cols[:-1]
df = df[cols]

ax = df.plot(x='year', kind="area" )
ax.set_xticks(range(2000,2061,20))

plt.show()

enter image description here

除此之外,在通过 pandas 创建的日期轴上使用 Matplotlib 定位器和格式化程序将 most often fail 。这是由于 pandas 使用完全不同的日期时间约定。为了更自由地为日期时间轴设置自定义标记,您可以使用 matplotlib。可以使用 plt.stackplot 来绘制 stackplot。在这样的 matplotlib 图上,使用通常的 matplotlib 代码是没有问题的。

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

dates = np.arange(1990,2061, 1)

df = pd.DataFrame(np.random.randint(0,dates.size,size=(dates.size,3)),columns=list('ABC'))
df['year'] = pd.to_datetime(dates.astype(str)) 

cols = df.columns.tolist()
cols = [cols[-1]] + cols[:-1]
df = df[cols]

plt.stackplot(df["year"].values, df[list('ABC')].values.T)

years = dts.YearLocator(20)
plt.gca().xaxis.set_major_locator(years)

plt.margins(x=0)
plt.show()

enter image description here

关于python - 如何更改 Pandas DataFrame 面积图上的年份间隔?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46719625/

相关文章:

python - 如何舍入 matplotlib 饼图中显示的值?

python - python中矩形的颜色

python - Python matplotlib 绘图顶部和底部的空白

python - 如何为 ipython 设置配置文件

python - 无法导入twisted的互联网模块

python - 在Python中基于条件绘制多色时间序列图

python - 使用 numpy 将自定义颜色分配给集群

python - 在 Selenium 中将 PhantomJS 用于 headless 浏览器 - Python

python - 同时下载多个页面?

python - 循环遍历相应的行并更改数据框的值