簡體   English   中英

熊貓在x軸上繪制xticks

[英]pandas plot xticks on x-axis

我有一個工作代碼,可在圖表中將熊貓數據框顯示為2個折線圖。 我也有一個數據框,可在同一圖表上顯示條形圖。 對於2個數據框,我有x軸的日期。 因為兩個數據幀都有日期,所以我的軸最終只有整數(1,2,3,4,5,6 ...)而不是日期。

我認為這條線df1 = df.set_index(['date'])指定了我想要的x軸,並且當我df1 = df.set_index(['date'])圖表上繪制條形圖時,日期顯示的很好,但是當我繪制圖時條形圖,整數顯示在軸上。

我的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

我的代碼:

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

您可以只使用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])

在此處輸入圖片說明

后續(更新):

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