[英]Pandas Dataframe.plot, how to change x-axis labels
我正在尝试使用 Python/Pandas 在条形图上绘制为期一年的值集。 结果图非常混乱,我尝试设置 xtick 标签不起作用。
我的原始代码:
import datetime as dt
import random
import pandas as pd
#generate year-long list of dates
i = 0
list_of_dates = []
last_date = dt.date(2017, 1, 1)
while i < 365:
list_of_dates.append(last_date)
last_date += dt.timedelta(days=1)
#print(last_date)
i = i + 1
#generate random values for example
daily_rainfall = []
j = 0
while j < 365:
daily_rainfall.append(random.randint(0,3))
j = j + 1
#put lists in DF
rainfall_dataframe = pd.DataFrame(list(zip(list_of_dates, daily_rainfall)),columns=["Date","Precipitation"])
rainfall_dataframe = rainfall_dataframe.groupby(["Date"]).sum()
rainfall_dataframe.plot(kind="bar", figsize=(13,7))
返回这个:
不能用,很明显。 所以我希望它每月只标记 x-ticks。 我尝试创建一个日期时间日期对象列表,它只是每个月的第一个,但是当我尝试将它传递给 df.plot() 时,它什么都不返回。
xlablist = []
xlablist.append(dt.date(2017, 1, 1))
xlablist.append(dt.date(2017, 6, 1))
xlablist.append(dt.date(2018, 1, 1))
rainfall_dataframe.plot(kind="bar", figsize=(13,7), xticks=xlablist)
返回:
请帮忙!
您可以使用Date locators 。
import datetime as dt
import random
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
#generate year-long list of dates
i = 0
list_of_dates = []
last_date = dt.date(2017, 1, 1)
while i < 365:
list_of_dates.append(last_date)
last_date += dt.timedelta(days=1)
#print(last_date)
i = i + 1
#generate random values for example
daily_rainfall = []
j = 0
while j < 365:
daily_rainfall.append(random.randint(0,3))
j = j + 1
#put lists in DF
rainfall_dataframe = pd.DataFrame(list(zip(list_of_dates, daily_rainfall)),columns=["Date","Precipitation"])
rainfall_dataframe = rainfall_dataframe.groupby(["Date"]).sum()
rainfall_dataframe.plot(kind="bar", figsize=(13,7))
plt.gca().xaxis.set_major_locator(mdates.MonthLocator())
plt.xticks(rotation=45)
plt.show()
一种可能的解决方案,使用MonthLocator指定放置x标签的位置并使用DateFormatter指定标签的格式:
# Imports
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
# Create source data
np.random.seed(0)
dates = pd.date_range(start='2017-01-01', end='2017-12-31')
rainfall = np.random.randint(0, 20, dates.size)
# Drawing
fig, ax = plt.subplots(figsize=(10, 4))
plt.xlabel('Month')
plt.ylabel('mm')
plt.title('Rainfall 2017')
ax.xaxis.set_major_locator(mdates.MonthLocator())
fmt = mdates.DateFormatter('%b %Y')
ax.xaxis.set_major_formatter(fmt)
ax.bar(dates, rainfall)
plt.setp(ax.get_xticklabels(), rotation=30);
对于上述源数据,我得到了以下图片:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.