简体   繁体   English

熊猫在x轴上绘制xticks

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM