[英]pandas plot xticks on x-axis
I have a working code that displays a panda dataframe as 2 line graphs in a chart. 我有一个工作代码,可在图表中将熊猫数据框显示为2个折线图。 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.
对于2个数据框,我有x轴的日期。 Because the two dataframes have dates, my axis end up just having integers (1,2,3,4,5,6...) instead of the date.
因为两个数据帧都有日期,所以我的轴最终只有整数(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轴,并且当我df1 = df.set_index(['date'])
图表上绘制条形图时,日期显示的很好,但是当我绘制图时条形图,整数显示在轴上。
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
You can just use ax.plot(df1.date, df1.line1)
and matplotlib.pyplot
will 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])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.