最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Python的Matplotlib繪制漸變的彩色曲線

 更新時(shí)間:2023年08月18日 10:14:23   作者:天元浪子  
這篇文章主要介紹了使用Python的Matplotlib繪制漸變的彩色曲線,Matplotlib是Python生態(tài)圈中應(yīng)用最為廣泛的2D繪圖庫,通過擴(kuò)展工具包mplot3d,也可以繪制簡單的3D模型,需要的朋友可以參考下

Matplotlib繪制漸變的彩色曲線

Matplotlib是Python生態(tài)圈中應(yīng)用最為廣泛的2D繪圖庫,通過擴(kuò)展工具包mplot3d,也可以繪制簡單的3D模型。

Matplotlib的使用非常簡單,以繪制一條單周期的正弦曲線為例,只需要寥寥數(shù)行代碼即可完成。

import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 2*np.pi, 200)
y = np.sin(x)
plt.plot(x, y, color='green')
plt.show()

上面的代碼在 [ 0 , 2 π ] [0, 2\pi] [0,2π]之間以均勻間隔選取了200個(gè)點(diǎn),并計(jì)算它們的正弦值,再調(diào)用plot函數(shù)將這200個(gè)點(diǎn)的正弦值連成一條曲線,通過plot函數(shù)的color參數(shù)(也可以簡寫為c)設(shè)置正弦曲線的顏色為綠色——當(dāng)然,也可以設(shè)置為你想要的任意一種顏色。

在這里插入圖片描述

不過,略有遺憾的是,Matplotlib沒有提供直接的方法為這條曲線上的每一個(gè)點(diǎn)設(shè)置不同的顏色,而這一需求在數(shù)據(jù)可視化方面卻是非常普遍的。

比如,在一條變化復(fù)雜的曲線上,如果每個(gè)點(diǎn)的數(shù)值越大顏色越趨近于紅色,數(shù)值越小顏色越趨近于藍(lán)色,就更容易展示數(shù)據(jù)的變化規(guī)律。

既然沒有直接的方法可用,那就變通一下,將這200個(gè)點(diǎn)拆分成199條線段,每條線段設(shè)置不同的顏色,不就可以實(shí)現(xiàn)上面的需求了嗎?

這樣做的確可行,不過需要調(diào)用plot函數(shù)199次,過程漫長到令人無法忍受,并且更新顯示(比如縮放)時(shí)也會重復(fù)這個(gè)漫長的調(diào)用過程。

幸運(yùn)的是,Matplotlib提供了另外一種方法,基本思路也是將這200個(gè)點(diǎn)拆分成199條線段,每條線段設(shè)置不同的顏色,只是不需要反復(fù)調(diào)用plot函數(shù),因此速度和單次調(diào)用plot函數(shù)相差無幾。

這個(gè)方法就是Matplotlib的LineCollection對象。

在使用LineCollection之前,還需要生成199條線段的顏色。

下面這個(gè)函數(shù)實(shí)現(xiàn)可數(shù)值到顏色的映射,給定一組數(shù)據(jù)和一個(gè)顏色映射方案,即返回每個(gè)數(shù)據(jù)的映射顏色。

import numpy as np
import matplotlib.pyplot as plt
def color_map(data, cmap):
    """數(shù)值映射為顏色"""
    dmin, dmax = np.nanmin(data), np.nanmax(data)
    cmo = plt.cm.get_cmap(cmap)
    cs, k = list(), 256/cmo.N
    for i in range(cmo.N):
        c = cmo(i)
        for j in range(int(i*k), int((i+1)*k)):
            cs.append(c)
    cs = np.array(cs)
    data = np.uint8(255*(data-dmin)/(dmax-dmin))
    return cs[data]

實(shí)例化LineCollection時(shí),需要提供多條線段的列表(每條線段可以有多個(gè)點(diǎn)組成),以及每條線段的顏色組成的列表,也可以設(shè)置線寬和線型。

如果需要繪制Colorbar的話,還需要為LineCollection指定和數(shù)據(jù)映射相同的顏色映射方案。完整代碼如下。

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.collections import LineCollection
def color_map(data, cmap):
    """數(shù)值映射為顏色"""
    dmin, dmax = np.nanmin(data), np.nanmax(data)
    cmo = plt.cm.get_cmap(cmap)
    cs, k = list(), 256/cmo.N
    for i in range(cmo.N):
        c = cmo(i)
        for j in range(int(i*k), int((i+1)*k)):
            cs.append(c)
    cs = np.array(cs)
    data = np.uint8(255*(data-dmin)/(dmax-dmin))
    return cs[data]
x = np.linspace(0, 2*np.pi, 200)
y = np.sin(x)
ps = np.stack((x,y), axis=1)
segments = np.stack((ps[:-1], ps[1:]), axis=1)
cmap = 'viridis' # jet, hsv等也是常用的顏色映射方案
colors = color_map(np.cos(x)[:-1], cmap)
colors = color_map(y[:-1], cmap)
line_segments = LineCollection(segments, colors=colors, linewidths=3, linestyles='solid', cmap=cmap)
fig, ax = plt.subplots()
ax.set_xlim(np.min(x)-0.1, np.max(x)+0.1)
ax.set_ylim(np.min(y)-0.1, np.max(y)+0.1)
ax.add_collection(line_segments)
cb = fig.colorbar(line_segments, cmap='jet')
plt.show()

使用LineCollection繪圖時(shí),axis不會自動在x軸和y軸兩端留白,通常需要調(diào)用set_xlim和set_ylim兩個(gè)函數(shù)設(shè)置坐標(biāo)軸的范圍。最終的顯示效果如下圖所示。

在這里插入圖片描述

到此這篇關(guān)于使用Python的Matplotlib繪制漸變的彩色曲線的文章就介紹到這了,更多相關(guān)Matplotlib繪制漸變的彩色曲線內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python四大金剛之列表詳解

    Python四大金剛之列表詳解

    這篇文章主要介紹了Python的列表,小編覺得這篇文章寫的還不錯(cuò),需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-10-10
  • Python編程異步爬蟲之a(chǎn)iohttp模塊的基本用法

    Python編程異步爬蟲之a(chǎn)iohttp模塊的基本用法

    aiohttp?模塊是一個(gè)基于?asyncio?的?HTTP?客戶端和服務(wù)器框架,可以用于異步處理?HTTP?請求和響應(yīng),這篇文章給大家介紹Python編程異步爬蟲之a(chǎn)iohttp模塊的基本用法,感興趣的朋友一起看看吧
    2024-03-03
  • 100行python代碼實(shí)現(xiàn)跳一跳輔助程序

    100行python代碼實(shí)現(xiàn)跳一跳輔助程序

    這篇文章主要介紹了100行代碼實(shí)現(xiàn)跳一跳輔助程序,接下來要分享的是用“純軟件”的方法來玩“跳一跳”。本人只做過Android開發(fā),因此下面只給出Android平臺下的實(shí)現(xiàn)方法。需要的朋友可以參考下
    2018-01-01
  • pytorch載入預(yù)訓(xùn)練模型后,實(shí)現(xiàn)訓(xùn)練指定層

    pytorch載入預(yù)訓(xùn)練模型后,實(shí)現(xiàn)訓(xùn)練指定層

    今天小編就為大家分享一篇pytorch載入預(yù)訓(xùn)練模型后,實(shí)現(xiàn)訓(xùn)練指定層,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • python panda庫從基礎(chǔ)到高級操作分析

    python panda庫從基礎(chǔ)到高級操作分析

    本文介紹了Pandas庫的核心功能,包括處理結(jié)構(gòu)化數(shù)據(jù)的Series和DataFrame數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)讀取、清洗、分組聚合、合并、時(shí)間序列分析及大數(shù)據(jù)優(yōu)化技巧,強(qiáng)調(diào)其高效性、靈活性和與科學(xué)計(jì)算庫的集成能力,感興趣的朋友跟隨小編一起看看吧
    2025-08-08
  • python正常時(shí)間和unix時(shí)間戳相互轉(zhuǎn)換的方法

    python正常時(shí)間和unix時(shí)間戳相互轉(zhuǎn)換的方法

    這篇文章主要介紹了python正常時(shí)間和unix時(shí)間戳相互轉(zhuǎn)換的方法,涉及時(shí)間字符串與Unix時(shí)間戳的實(shí)現(xiàn)與轉(zhuǎn)換技巧,需要的朋友可以參考下
    2015-04-04
  • 基于Python實(shí)現(xiàn)一個(gè)條形碼檢測算法

    基于Python實(shí)現(xiàn)一個(gè)條形碼檢測算法

    條形碼識別是計(jì)算機(jī)視覺中的常見任務(wù),下面我將介紹如何使用Python和深度學(xué)習(xí)框架實(shí)現(xiàn)一個(gè)高效的條形碼識別解決方案,有需要的小伙伴可以了解下
    2025-12-12
  • Python實(shí)現(xiàn)檢測服務(wù)器是否可以ping通的2種方法

    Python實(shí)現(xiàn)檢測服務(wù)器是否可以ping通的2種方法

    這篇文章主要介紹了Python實(shí)現(xiàn)檢測服務(wù)器是否可以ping通的2種方法,本文分別講解了使用ping和fping命令檢測服務(wù)器是否可以ping通,需要的朋友可以參考下
    2015-01-01
  • Python實(shí)現(xiàn)添加或移除PowerPoint中的背景圖和背景顏色

    Python實(shí)現(xiàn)添加或移除PowerPoint中的背景圖和背景顏色

    在處理 PowerPoint 演示文稿時(shí),我們常常會遇到需要為幻燈片添加或移除背景的情況,本文將介紹如何使用 Python 在 PowerPoint 中添加或移除背景,并提供詳細(xì)步驟和代碼示例,幫助你快速上手
    2026-05-05
  • 淺談算法之最小生成樹Kruskal的Python實(shí)現(xiàn)

    淺談算法之最小生成樹Kruskal的Python實(shí)現(xiàn)

    最小生成樹Kruskal算法可以稱為“加邊法”,初始最小生成樹邊數(shù)為0,每迭代一次就選擇一條滿足條件的最小代價(jià)邊,加入到最小生成樹的邊集合里。本文將介紹它的原理,并用Python進(jìn)行實(shí)現(xiàn)
    2021-06-06

最新評論

蒙自县| 井研县| 徐汇区| 北海市| 永仁县| 栾城县| 彭水| 遂昌县| 上饶县| 松滋市| 大余县| 祁东县| 文成县| 敖汉旗| 都江堰市| 土默特右旗| 抚远县| 青岛市| 繁昌县| 新和县| 淮阳县| 韩城市| 平塘县| 德州市| 南郑县| 内黄县| 新竹市| 揭西县| 澜沧| 沈丘县| 神木县| 屏边| 杭州市| 寿光市| 乃东县| 游戏| 耒阳市| 宜宾市| 延寿县| 南安市| 菏泽市|