我想用 matplot.pylib、pandas 绘制跨越几年的数据集中每月值的变化
I want to plot changes in monthly values from dataset spanning over few years with matplot.pylib, pandas
我正在尝试使用 matplotlib (python) 和 pandas 绘制一个显示月度值变化的图表,而我是新手,因此遇到了困难。提前为格式道歉。
这是一个数据帧示例:
Year Month Value
2014 January 510
2014 February 542
2014 March 684
2014 April 700
2014 May 732
2014 July 603
2014 August 643
2014 September 680
2014 October 723
2014 November 760
2014 December 810
2015 January 920
2015 February 900
2015 March 780
2015 April 710
2015 May 810
2015 July 895
2015 August 906
2015 September 945
2015 October 980
2015 November 1000
2015 December 1123
这是我尝试过的(简化版):
import matplotlib.pyplot as plt
plt.title('Monthly data over several years')
plt.plot(df['Month'].to_list(), df['Value'].to_list())
这将导致 2015 年每个月在 Y 轴上的绘制值返回到前一年的相应月份,而不是在 2015 年 1 月至 12 月的 Y 轴上。例如,2015 年 1 月的值 920 将在 Y 轴上直接回到 2014 年 1 月。
我也试过:
months = {"January": 1, "February": 2, "March": 3, "April": 4, "May": 5, "June": 6,
"July": 7, "August": 8, "September": 9, "October": 10, "November": 11, "December": 12}
df{'Month'] = df.Month.map(months)
df['Date'] = df['Year'].map(str) + '-' + df['Month'].map(str)
这是为了将月份与相应的年份连接起来以避免之前的问题,但是,我最终在 df['Months'] 列中得到了 NaN 值。此外,我觉得它会在 x 轴上过度填充 xticks(或标签??),如果它确实有效的话。
我想要的是一个时间序列,如图表,显示两年中值的每月变化。我正在努力在图表上整齐地构建 xticks。否则,条形图会更好吗?
如果将 Year/month 列拆分为每年的单独系列,就容易多了
import pandas as pd
import matplotlib.pyplot as plt
fig, axes = plt.subplots(figsize=(6,4))
df = pd.read_csv("data.csv")
df2 = pd.pivot_table(df, index="Month", columns=["Year"])
df2 = df2.reindex(['January', 'February', 'March', 'April', 'May', 'July', 'August', 'September', 'October', 'November', 'December'])
df2.plot(ax=axes)
fig.savefig("plot.png")
我正在尝试使用 matplotlib (python) 和 pandas 绘制一个显示月度值变化的图表,而我是新手,因此遇到了困难。提前为格式道歉。
这是一个数据帧示例:
Year Month Value
2014 January 510
2014 February 542
2014 March 684
2014 April 700
2014 May 732
2014 July 603
2014 August 643
2014 September 680
2014 October 723
2014 November 760
2014 December 810
2015 January 920
2015 February 900
2015 March 780
2015 April 710
2015 May 810
2015 July 895
2015 August 906
2015 September 945
2015 October 980
2015 November 1000
2015 December 1123
这是我尝试过的(简化版):
import matplotlib.pyplot as plt
plt.title('Monthly data over several years')
plt.plot(df['Month'].to_list(), df['Value'].to_list())
这将导致 2015 年每个月在 Y 轴上的绘制值返回到前一年的相应月份,而不是在 2015 年 1 月至 12 月的 Y 轴上。例如,2015 年 1 月的值 920 将在 Y 轴上直接回到 2014 年 1 月。
我也试过:
months = {"January": 1, "February": 2, "March": 3, "April": 4, "May": 5, "June": 6,
"July": 7, "August": 8, "September": 9, "October": 10, "November": 11, "December": 12}
df{'Month'] = df.Month.map(months)
df['Date'] = df['Year'].map(str) + '-' + df['Month'].map(str)
这是为了将月份与相应的年份连接起来以避免之前的问题,但是,我最终在 df['Months'] 列中得到了 NaN 值。此外,我觉得它会在 x 轴上过度填充 xticks(或标签??),如果它确实有效的话。
我想要的是一个时间序列,如图表,显示两年中值的每月变化。我正在努力在图表上整齐地构建 xticks。否则,条形图会更好吗?
如果将 Year/month 列拆分为每年的单独系列,就容易多了
import pandas as pd
import matplotlib.pyplot as plt
fig, axes = plt.subplots(figsize=(6,4))
df = pd.read_csv("data.csv")
df2 = pd.pivot_table(df, index="Month", columns=["Year"])
df2 = df2.reindex(['January', 'February', 'March', 'April', 'May', 'July', 'August', 'September', 'October', 'November', 'December'])
df2.plot(ax=axes)
fig.savefig("plot.png")