我有一个数据框,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)
产生以下内容:
我的数据框中还有一列df['year']
,其中包含我希望沿x轴移动的值。我尝试了以下
plt.xticks(df['year'])
但是发生了以下情况:
有没有办法使用列df['year']
并将其值作为x轴刻度标记而无需手动列出它们?我希望最终版本看起来像第一个图,但沿着x轴具有df['year']
的唯一值。
答案 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.(不确定这是否有意义。)
如果您只想标记每年的第一次出现,您可以使用如下的唯一年份
unique_years, ind = np.unique(df["year"].values,return_index=True)
plt.xticks(df.index[ind], unique_years)
导致类似这样的事情:
答案 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轴,列名称会自动归为行标签。