python - 使用数据框列更改x轴

时间:2018-02-06 00:28:15

标签: python pandas matplotlib plot

我有一个数据框,df我过去常常生成两个系列的图:

year = [2002, 2002, 2002, 2002]
month = ['Jan', 'Feb', 'Mar', 'Apr']
column1 = [3.3, 3.0, 3.1, 3.2, 2.9]
column2 = [7.0, 7.1, 7.3, 6.9, 7.3]
Dataset = list(zip(year, month, column1, column2))
df = DataFrame(data = Dataset, columns = ['year', 'month', 'column1', 'column2'])
df['column1'].plot(legend = True, label = 'column1')
df['column2'].plot(legend = True, label = 'column2', title = \
"Figure 1", style = '--', linewidth = 2.5)

产生以下内容:

enter image description here

我的数据框中还有一列df['year'],其中包含我希望沿x轴移动的值。我尝试了以下

plt.xticks(df['year'])

但是发生了以下情况:

enter image description here

有没有办法使用列df['year']并将其值作为x轴刻度标记而无需手动列出它们?我希望最终版本看起来像第一个图,但沿着x轴具有df['year']的唯一值。

2 个答案:

答案 0 :(得分:2)

要将ticklabels设置为某些dataframe列的值,您需要将tickpositions设置为数据框的索引,将标签设置为所述列的值。

plt.xticks(df.index,df["year"].values)

完整示例:

from pandas import DataFrame
import matplotlib.pyplot as plt

year = [2002, 2002, 2002, 2002]
month = ['Jan', 'Feb', 'Mar', 'Apr']
column1 = [3.3, 3.0, 3.1, 3.2, 2.9]
column2 = [7.0, 7.1, 7.3, 6.9, 7.3]
Dataset = list(zip(year, month, column1, column2))
df = DataFrame(data = Dataset, columns = ['year', 'month', 'column1', 'column2'])
df['column1'].plot(legend = True, label = 'column1')
df['column2'].plot(legend = True, label = 'column2', title = \
      "Figure 1", style = '--', linewidth = 2.5)

plt.xticks(df.index,df["year"].values)

plt.show()

这当然显示所有标签都是2002,因为年份列中的所有值都是2002.(不确定这是否有意义。)

enter image description here

如果您只想标记每年的第一次出现,您可以使用如下的唯一年份

unique_years, ind = np.unique(df["year"].values,return_index=True)
plt.xticks(df.index[ind], unique_years)

导致类似这样的事情:

enter image description here

答案 1 :(得分:1)

您可以先将'year'列设为索引:

df.set_index('year')

比你可以用pandas绘图:

df[['column1','column2']].plot(title = 'Figure 1', legend = True, style = ['-','--'], linewidth = 2.5)
plt.show()

Pandas会将两个系列打印在同一图表中,索引'year'为x轴,列名称会自动归为行标签。