pandas 熊猫在 x 轴上绘制 xticks
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/31332264/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
pandas plot xticks on x-axis
提问by jxn
I have a working code that displays a panda dataframe as 2 line graphs in a chart. I also have a dataframe that displays a bar graph on the same chart. For the 2 dataframes, i have date for the x-axis. Because the two dataframes have dates, my axis end up just having integers (1,2,3,4,5,6...) instead of the date.
我有一个工作代码,它将Pandas数据框显示为图表中的 2 个折线图。我还有一个数据框,它在同一图表上显示条形图。对于 2 个数据框,我有 x 轴的日期。因为两个数据框都有日期,所以我的轴最终只有整数(1,2,3,4,5,6...)而不是日期。
I thought this line df1 = df.set_index(['date'])specifies what i want as the x-axis already and when i dont plot the bar graph on the chart, the dates show up nicely, but when i do plot the bar graph, the integers show up on the axis instead.
我认为这条线已经df1 = df.set_index(['date'])指定了我想要的 x 轴,当我不在图表上绘制条形图时,日期显示得很好,但是当我绘制条形图时,整数反而显示在轴上。
My 2 dataframes:
我的 2 个数据框:
df1:
date line1 line2
2015-01-01 15.00 23.00
2015-02-01 18.00 10.00
df2:
date quant
2015-01-01 500
2015-02-01 600
My code:
我的代码:
df1 =pd.DataFrame(result, columns =[ 'date','line1', 'line2'])
df1 = df.set_index(['date'])
df2 =pd.DataFrame(quantity, columns =[ 'quant','date'])
fig = plt.figure()
ax = fig.add_subplot(111)
ax2=ax.twinx()
ax.set_ylim(0,100)
ax2.set_ylim(0,2100)
df1.line1.plot( color = 'red', ax = ax)
df1.line2.plot( color = 'blue', ax = ax)
df2.["quant"].plot(kind = 'bar', ax =ax2, width =0.4)
plt.show()


df1:
<class 'pandas.core.frame.DataFrame'>
Int64Index: 12 entries, 0 to 11
Data columns (total 3 columns):
date 12 non-null object
line1 12 non-null float64
line2 12 non-null float64
dtypes: float64(2), object(1)
memory usage: 384.0+ bytes
None
df2
<class 'pandas.core.frame.DataFrame'>
Int64Index: 11 entries, 0 to 10
Data columns (total 2 columns):
quant 11 non-null int64
date 11 non-null object
dtypes: int64(1), object(1)
memory usage: 264.0+ bytes
None
回答by Jianxun Li
You can just use ax.plot(df1.date, df1.line1)and matplotlib.pyplotwill automatically take care of the date.
您可以使用ax.plot(df1.date, df1.line1)并matplotlib.pyplot自动处理日期。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# your data
# ===================================
np.random.seed(0)
df1 = pd.DataFrame(dict(date=pd.date_range('2015-01-01', periods=12, freq='MS'), line1=np.random.randint(10, 30, 12), line2=np.random.randint(20, 25, 12)))
Out[64]:
date line1 line2
0 2015-01-01 22 22
1 2015-02-01 25 21
2 2015-03-01 10 20
3 2015-04-01 13 21
4 2015-05-01 13 21
5 2015-06-01 17 20
6 2015-07-01 19 21
7 2015-08-01 29 24
8 2015-09-01 28 23
9 2015-10-01 14 20
10 2015-11-01 16 23
11 2015-12-01 22 20
df2 = pd.DataFrame(dict(date=pd.date_range('2015-01-01', periods=12, freq='MS'), quant=100*np.random.randint(3, 10, 12)))
Out[66]:
date quant
0 2015-01-01 500
1 2015-02-01 600
2 2015-03-01 300
3 2015-04-01 400
4 2015-05-01 600
5 2015-06-01 800
6 2015-07-01 600
7 2015-08-01 600
8 2015-09-01 900
9 2015-10-01 300
10 2015-11-01 400
11 2015-12-01 400
# plotting
# ===================================
fig, ax = plt.subplots(figsize=(10, 8))
ax.plot(df1.date, df1.line1, label='line1', c='r')
ax.plot(df1.date, df1.line2, label='line2', c='b')
ax2 = ax.twinx()
ax2.set_ylabel('quant')
ax2.bar(df2.date, df2.quant, width=20, alpha=0.1, color='g', label='quant')
ax.legend(loc='best')
ax.set_xticks(ax.get_xticks()[::2])


Follow-up (Updates):
跟进(更新):
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# your data
# ===================================
np.random.seed(0)
df1 = pd.DataFrame(dict(date=pd.date_range('2015-01-01', periods=12, freq='MS'), line1=np.random.randint(10, 30, 12), line2=np.random.randint(20, 25, 12))).set_index('date')
df2 = pd.DataFrame(dict(date=pd.date_range('2015-01-01', periods=12, freq='MS'), quant=100*np.random.randint(3, 10, 12))).set_index('date')
df2 = df2.drop(df2.index[4])
print(df1)
print(df2)
line1 line2
date
2015-01-01 22 22
2015-02-01 25 21
2015-03-01 10 20
2015-04-01 13 21
2015-05-01 13 21
2015-06-01 17 20
2015-07-01 19 21
2015-08-01 29 24
2015-09-01 28 23
2015-10-01 14 20
2015-11-01 16 23
2015-12-01 22 20
quant
date
2015-01-01 500
2015-02-01 600
2015-03-01 300
2015-04-01 400
2015-06-01 800
2015-07-01 600
2015-08-01 600
2015-09-01 900
2015-10-01 300
2015-11-01 400
2015-12-01 400
# plotting
# ===================================
fig, ax = plt.subplots(figsize=(10, 8))
ax.plot(df1.index, df1.line1, label='line1', c='r')
ax.plot(df1.index, df1.line2, label='line2', c='b')
ax2 = ax.twinx()
ax2.set_ylabel('quant')
ax2.bar(df2.index, df2.quant, width=20, alpha=0.1, color='g', label='quant')
ax.legend(loc='best')
ax.set_xticks(ax.get_xticks()[::2])



