pandas+matploblib畫圖 疊加兩張圖
阿新 • • 發佈:2019-02-05
《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()