Python 作圖實現(xiàn)坐標軸截斷(打斷)的效果
更新時間:2021年04月16日 11:59:38 作者:Dmoll
這篇文章主要介紹了Python 作圖實現(xiàn)坐標軸截斷(打斷)的效果,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
主題:利用python畫圖實現(xiàn)坐標軸截斷或打斷
關鍵詞:python, plot, matplotlib, break axes
方法一:
首先介紹一種簡單快速的方法——調用包 brokenaxes。
import matplotlib.pyplot as plt from brokenaxes import brokenaxes import numpy as np fig = plt.figure(figsize=(5,2)) bax = brokenaxes(xlims=((0, .1), (.4, .7)), ylims=((-1, .7), (.79, 1)), hspace=.05, despine=False) x = np.linspace(0, 1, 100) bax.plot(x, np.sin(10 * x), label='sin') bax.plot(x, np.cos(10 * x), label='cos') bax.legend(loc=3) bax.set_xlabel('time') bax.set_ylabel('value')
效果如下:
方法二:
拼接法,該種方法代碼更繁瑣,但更有可能滿足個性化的需求。
""" Broken axis example, where the y-axis will have a portion cut out. """ import matplotlib.pyplot as plt import numpy as np # 30 points between [0, 0.2) originally made using np.random.rand(30)*.2 pts = np.array([ 0.015, 0.166, 0.133, 0.159, 0.041, 0.024, 0.195, 0.039, 0.161, 0.018, 0.143, 0.056, 0.125, 0.096, 0.094, 0.051, 0.043, 0.021, 0.138, 0.075, 0.109, 0.195, 0.050, 0.074, 0.079, 0.155, 0.020, 0.010, 0.061, 0.008]) # Now let's make two outlier points which are far away from everything. pts[[3, 14]] += .8 # If we were to simply plot pts, we'd lose most of the interesting # details due to the outliers. So let's 'break' or 'cut-out' the y-axis # into two portions - use the top (ax) for the outliers, and the bottom # (ax2) for the details of the majority of our data f, (ax, ax2) = plt.subplots(2, 1, sharex=True) # plot the same data on both axes ax.plot(pts) ax2.plot(pts) # zoom-in / limit the view to different portions of the data ax.set_ylim(.78, 1.) # outliers only ax2.set_ylim(0, .22) # most of the data # hide the spines between ax and ax2 ax.spines['bottom'].set_visible(False) ax2.spines['top'].set_visible(False) ax.xaxis.tick_top() ax.tick_params(labeltop='off') # don't put tick labels at the top ax2.xaxis.tick_bottom() # This looks pretty good, and was fairly painless, but you can get that # cut-out diagonal lines look with just a bit more work. The important # thing to know here is that in axes coordinates, which are always # between 0-1, spine endpoints are at these locations (0,0), (0,1), # (1,0), and (1,1). Thus, we just need to put the diagonals in the # appropriate corners of each of our axes, and so long as we use the # right transform and disable clipping. d = .015 # how big to make the diagonal lines in axes coordinates # arguments to pass to plot, just so we don't keep repeating them kwargs = dict(transform=ax.transAxes, color='k', clip_on=False) ax.plot((-d, +d), (-d, +d), **kwargs) # top-left diagonal ax.plot((1 - d, 1 + d), (-d, +d), **kwargs) # top-right diagonal kwargs.update(transform=ax2.transAxes) # switch to the bottom axes ax2.plot((-d, +d), (1 - d, 1 + d), **kwargs) # bottom-left diagonal ax2.plot((1 - d, 1 + d), (1 - d, 1 + d), **kwargs) # bottom-right diagonal # What's cool about this is that now if we vary the distance between # ax and ax2 via f.subplots_adjust(hspace=...) or plt.subplot_tool(), # the diagonal lines will move accordingly, and stay right at the tips # of the spines they are 'breaking' plt.show()
效果如下:
補充:python繪制折線圖--縱坐標y軸截斷
看代碼吧~
# -*- coding: utf-8 -*- """ Created on Wed Dec 4 21:50:38 2019 @author: muli """ import matplotlib.pyplot as plt from pylab import * mpl.rcParams['font.sans-serif'] = ['SimHei'] #支持中文 names = ["1","2","3","4","5"] # 刻度值命名 x = [1,2,3,4,5] # 橫坐標 y3= [2,3,1,4,5] # 縱坐標 y4= [4,6,8,5,9] # 縱坐標 y5=[24,27,22,26,28] # 縱坐標 f, (ax3, ax) = plt.subplots(2, 1, sharex=False) # 繪制兩個子圖 plt.subplots_adjust(wspace=0,hspace=0.08) # 設置 子圖間距 ax.plot(x, y3, color='red', marker='o', linestyle='solid',label=u'1') # 繪制折線 ax.plot(x, y4, color='g', marker='o', linestyle='solid',label=u'2') # 繪制折線 plt.xticks(x, names, rotation=45) # 刻度值 ax3.xaxis.set_major_locator(plt.NullLocator()) # 刪除坐標軸的刻度顯示 ax3.plot(x, y5, color='blue', marker='o', linestyle='solid',label=u'3') # 繪制折線 ax3.plot(x, y3, color='red', marker='o', linestyle='solid',label=u'1') # 起圖例作用 ax3.plot(x, y4, color='g', marker='o', linestyle='solid',label=u'2') # 起圖例作用 ax3.set_ylim(21, 30) # 設置縱坐標范圍 ax.set_ylim(0, 10) # 設置縱坐標范圍 ax3.grid(axis='both',linestyle='-.') # 打開網(wǎng)格線 ax.grid(axis='y',linestyle='-.') # 打開網(wǎng)格線 ax3.legend() # 讓圖例生效 plt.xlabel(u"λ") #X軸標簽 plt.ylabel("mAP") #Y軸標簽 ax.spines['top'].set_visible(False) # 邊框控制 ax.spines['bottom'].set_visible(True) # 邊框控制 ax.spines['right'].set_visible(False) # 邊框控制 ax3.spines['top'].set_visible(False) # 邊框控制 ax3.spines['bottom'].set_visible(False) # 邊框控制 ax3.spines['right'].set_visible(False) # 邊框控制 ax.tick_params(labeltop='off') # 繪制斷層線 d = 0.01 # 斷層線的大小 kwargs = dict(transform=ax3.transAxes, color='k', clip_on=False) ax3.plot((-d, +d), (-d, +d), **kwargs) # top-left diagonal kwargs.update(transform=ax.transAxes, color='k') # switch to the bottom axes ax.plot((-d, +d), (1 - d, 1 + d), **kwargs) # bottom-left diagonal plt.show()
結果如圖所示:
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
相關文章
使用selenium和pyquery爬取京東商品列表過程解析
這篇文章主要介紹了使用selenium和pyquery爬取京東商品列表過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-08-08Python并發(fā)concurrent.futures和asyncio實例
這篇文章主要介紹了Python并發(fā)concurrent.futures和asyncio實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05Python 利用郵件系統(tǒng)完成遠程控制電腦的實現(xiàn)(關機、重啟等)
這篇文章主要介紹了Python 利用郵件系統(tǒng)完成遠程控制電腦(關機、重啟等),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-11-11吳恩達機器學習練習:神經(jīng)網(wǎng)絡(反向傳播)
這篇文章主要介紹了學習吳恩達機器學習中的一個練習:神經(jīng)網(wǎng)絡(反向傳播),在這個練習中,你將實現(xiàn)反向傳播算法來學習神經(jīng)網(wǎng)絡的參數(shù),需要的朋友可以參考下2021-04-04