1. 程式人生 > >pandas+matploblib畫圖 疊加兩張圖

pandas+matploblib畫圖 疊加兩張圖

《python資料分析與挖掘實戰》原書上的例子:

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
plt.rcParams['font.sans-serif'] = ['SimHei'] #用來正常顯示中文標籤
plt.rcParams['axes.unicode_minus'] = False #用來正常顯示負號
x=pd.Series(np.exp(np.arange(20)))
x.plot(label=u'原始資料圖',legend=True)
plt.grid(True)
plt.show()
x.plot(logy=True,label=u'對數資料圖',legend=True) #這個函式裡的引數logy=True時,是以10為底的
plt.grid(True)
plt.show()
效果圖如下:


現在想把它倆畫在一張圖上,是可以畫一起的,但是,圖例沒法顯示出來,最後查了官網的資料,需要使用using-proxy-artist ,程式碼如下:

import matplotlib.lines as mlines
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
plt.rcParams['font.sans-serif'] = ['SimHei'] #用來正常顯示中文標籤
plt.rcParams['axes.unicode_minus'] = False #用來正常顯示負號
plt.figure()
x=pd.Series(np.exp(np.arange(20)))
p1=x.plot(label=u'原始資料圖')
plt.ylabel('正常座標')
x2=pd.Series(np.log10(x)) #np.log()是以e為底的
p2=x2.plot(secondary_y=True,style='--',color='r',)
plt.yticks(plt.yticks()[0],['$10^%d$'%w for w in range(len(plt.yticks()[0]))])
#x.plot(logy=True,label=u'對數資料圖',legend=True,secondary_y=True,style='--',color='r') #這裡不能用這個,因為它會同時改變圖中的x座標軸和y座標軸
plt.ylabel('指數座標')
blue_line = mlines.Line2D([],[],linestyle='-',color='blue',markersize=2, label=u'原始資料圖')
red_line= mlines.Line2D([],[],linestyle='--',color='red',markersize=2, label=u'對數資料圖')
plt.legend(handles=[blue_line,red_line],loc='upper left')
plt.grid(True)
plt.show()
效果如下: