Maison >développement back-end >Tutoriel Python >Toujours ennuyé par les paramètres de calque fastidieux de Matplotlib ! ? Venez jeter un œil à cette boîte à outils de dessin Python

Toujours ennuyé par les paramètres de calque fastidieux de Matplotlib ! ? Venez jeter un œil à cette boîte à outils de dessin Python

Python当打之年
Python当打之年avant
2023-08-10 16:00:111383parcourir


Êtes-vous dérouté par les paramètres compliqués des attributs de dessin de matplotlib ? Êtes-vous obligé de lire des documents API longs et ennuyeux parce que vous ne vous souvenez souvent pas d'une certaine fonction de configuration des couches ? Ou écrivez-vous beaucoup de code de boucle pour définir les propriétés lorsque vous faites face à plusieurs sous-parcelles matplotlib ? Enfin, espérez-vous toujours pouvoir maîtriser toutes les méthodes de dessin de graphiques bidimensionnels, spatiaux et autres en maîtrisant simplement un seul package de dessin Python ? ? En plus, il y a beaucoup de frustrations et de plaintes. Je me demande si vous êtes comme ça ? Quoi qu'il en soit, les points énumérés ci-dessus sont mes plus grands sentiments lorsque j'utilise matplotlib pour personnaliser des graphiques. Bien sûr, ce tweet n'est pas pour me plaindre, mais pour vous proposer de bonnes solutions. Présentons le protagoniste d'aujourd'hui : ProPlot. Sérieusement! " Je ri, ça sent si bon ! Qu'est-ce que j'ai fait avant ? Utilisez-le vite !". Bref, si le tweet précédent avait été révisé plusieurs fois par SCI à cause des photos ! ? Parce que vous n'avez pas découvert que cette boîte à outils de dessin scientifique Python vous permet de configurer des formats de figures au niveau de la publication scientifique en une seule étape, alors ce tweet vous expliquera comment utiliser moins de code pour répondre aux exigences fastidieuses de dessin personnalisé. est également un diagramme qui répond aux exigences de publication. Le contenu principal est le suivant :
Introduction à la bibliothèque ProPlot
  • Démonstration de l'exemple ProPlot

Introduction à la bibliothèque ProPlotLors de l'utilisation de Python-matplotlib. pour dessiner des graphiques, les thèmes de couleur et de format par défaut ne peuvent que nous aider à nous familiariser avec les fonctions de dessin, mais si vous souhaitez concevoir d'excellents travaux de visualisation (qu'ils soient de niveau éditorial ou légèrement artistiques), vous devez vous familiariser avec un grand nombre de des fonctions de dessin, telles que couleur, échelle, axe, police

etc., lorsqu'il s'agit de dessiner

plusieurs sous-tracés, ces opérations nous coûteront beaucoup d'énergie, sans provoquer de longues écritures de code, et elles sont également sujettes aux erreurs Pour plus de détails, vous pouvez consulter mon article précédent Python-matplotlib Academic Scatter Chart EE Statistiques et dessin et Python-matplotlib diagramme à colonnes empilées horizontales. De plus, si vous devez utiliser matplotlib pour dessiner tous les jours et que vous avez souvent besoin d'embellir des graphiques, alors le package de dessin Proplot est parfait pour vous, et ne vous inquiétez pas de ne pas vous y adapter, ce qui est hautement encapsulé. génial Simplifiez simplement la fonction de dessin. Ci-dessous, nous présenterons brièvement son installation et ses principales méthodes d'utilisation. Si vous souhaitez en savoir plus, vous pouvez vous rendre sur le site officiel.

Installation

Nous pouvons utiliser directement pip ou conda pour installer directement,

#for pip
pip install proplot
#for conda
conda install -c conda-forge proplot

Bien sûr, en raison de la mise à jour continue de la version, vous pouvez également utiliser le code suivant pour le traitement de la mise à jour :

#for pip
pip install --upgrade proplot
#for conda
conda upgrade proplot

format() simplifie le code

Proplot n'a pas besoin de définir chaque propriété de traçage comme le fait matplotlib. La fonction format() fournit une méthode de formatage pour modifier tous les paramètres en même temps. Donnons d'abord un exemple simple, comme suit :

  • Utilisez matplotlib pour dessiner
import matplotlib.pyplot as plt
import matplotlib.ticker as mticker
import matplotlib as mpl
with mpl.rc_context(rc={'axes.linewidth': 1, 'axes.color': 'gray'}):
    fig, axs = plt.subplots(ncols=2, sharey=True)
    axs[0].set_ylabel('bar', color='gray')
    for ax in axs:
        ax.set_xlim(0, 100)
        ax.xaxis.set_major_locator(mticker.MultipleLocator(10))
        ax.tick_params(width=1, color='gray', labelcolor='gray')
        ax.tick_params(axis='x', which='minor', bottom=True)
        ax.set_xlabel('foo', color='gray')
  • ProPlot draw
import proplot as plot
fig, axs = plot.subplots(ncols=2)
axs.format(linewidth=1, color='gray')
axs.format(xlim=(0, 100), xticks=10, xtickminor=True, xlabel='foo', ylabel='bar')

À partir de cet exemple simple, vous pouvez voir la simplicité de Proplot.

A-b-c Plusieurs numéros de série de sous-images sont ajoutés

En plus du format() ci-dessus qui réduit considérablement la quantité de code, nous avons introduit une méthode de dessin que je pense plus pratique - Plusieurs numéros de série de sous-images sont automatiquement ajoutés. L'exemple spécifique est le suivant :

# 样本数据
import numpy as np
state = np.random.RandomState(51423)
data = 2 * (state.rand(100, 5) - 0.5).cumsum(axis=0)

import proplot as plot
fig, axs = plot.subplots(ncols=2)
axs[0].plot(data, lw=2)
axs[0].format(xticks=20, xtickminor=False)
axs.format(abc=True,abcstyle='(A)',abcsize=12,abcloc='ul',
    suptitle='Abc label test', title='Title',
    xlabel='x axis', ylabel='y axis'
)
plt.savefig(r'E:\Data_resourses\DataCharm 公众号\Python\学术图表绘制\ProPlot\abc_01.png',
             dpi=900)

L'effet est le suivant : Toujours ennuyé par les paramètres de calque fastidieux de Matplotlib ! ? Venez jeter un œil à cette boîte à outils de dessin Python

Vous pouvez également définir le style (abcstyle), la position (abcloc), la taille (abcsize), etc. pour le numéro de série. Pour d'autres paramètres détaillés, veuillez vous référer au site officiel.

Colorbars et légendes

  • axis Colorbars et légendes
import proplot as plot
import numpy as np
fig, axs = plot.subplots(nrows=2, share=0, axwidth='55mm', panelpad='1em')
axs.format(suptitle='Stacked colorbars demo')
state = np.random.RandomState(51423)
N = 10
# Repeat for both axes
for j, ax in enumerate(axs):
    ax.format(
        xlabel='data', xlocator=np.linspace(0, 0.8, 5),
        title=f'Subplot #{j+1}'
    )
    for i, (x0, y0, x1, y1, cmap, scale) in enumerate((
        (0, 0.5, 1, 1, 'grays', 0.5),
        (0, 0, 0.5, 0.5, 'reds', 1),
        (0.5, 0, 1, 0.5, 'blues', 2)
    )):
        if j == 1 and i == 0:
            continue
        data = state.rand(N, N) * scale
        x, y = np.linspace(x0, x1, N + 1), np.linspace(y0, y1, N + 1)
        m = ax.pcolormesh(
            x, y, data, cmap=cmap,
            levels=np.linspace(0, scale, 11)
        )
        ax.colorbar(m, loc='l', label=f'dataset #{i+1}')
        
plt.savefig(r'E:\Data_resourses\DataCharm 公众号\Python\学术图表绘制\ProPlot\colorbar_legend_02.png',
             dpi=900)

L'effet est le suivant :Toujours ennuyé par les paramètres de calque fastidieux de Matplotlib ! ? Venez jeter un œil à cette boîte à outils de dessin Python

  • Figure 颜色条和图例
import proplot as plot
import numpy as np
fig, axs = plot.subplots(ncols=3, nrows=3, axwidth=1.4)
state = np.random.RandomState(51423)
m = axs.pcolormesh(
    state.rand(20, 20), cmap='grays',
    levels=np.linspace(0, 1, 11), extend='both'
)[0]
axs.format(
    suptitle='Figure colorbars and legends demo', abc=True,
    abcloc='l', abcstyle='(a)', xlabel='xlabel', ylabel='ylabel'
)
fig.colorbar(m, label='column 1', ticks=0.5, loc='b', col=1)
fig.colorbar(m, label='columns 2-3', ticks=0.2, loc='b', cols=(2, 3))
fig.colorbar(m, label='stacked colorbar', ticks=0.1, loc='b', minorticks=0.05)
fig.colorbar(m, label=&#39;colorbar with length <1&#39;, ticks=0.1, loc=&#39;r&#39;, length=0.7)

效果如下:Toujours ennuyé par les paramètres de calque fastidieux de Matplotlib ! ? Venez jeter un œil à cette boîte à outils de dessin Python

时间刻度(Datetime ticks)

  • Datetime ticks
import proplot as plot
import numpy as np
plot.rc.update(
    linewidth=1.2, fontsize=10, ticklenratio=0.7,
    figurefacecolor=&#39;w&#39;, facecolor=&#39;pastel blue&#39;,
    titleloc=&#39;upper center&#39;, titleborder=False,
)
fig, axs = plot.subplots(nrows=5, axwidth=6, aspect=(8, 1), share=0)
axs[:4].format(xrotation=0)  # no rotation for these examples

# Default date locator
# This is enabled if you plot datetime data or set datetime limits
axs[0].format(
    xlim=(np.datetime64(&#39;2000-01-01&#39;), np.datetime64(&#39;2001-01-02&#39;)),
    title=&#39;Auto date locator and formatter&#39;
)

# Concise date formatter introduced in matplotlib 3.1
axs[1].format(
    xlim=(np.datetime64(&#39;2000-01-01&#39;), np.datetime64(&#39;2001-01-01&#39;)),
    xformatter=&#39;concise&#39;, title=&#39;Concise date formatter&#39;,
)

# Minor ticks every year, major every 10 years
axs[2].format(
    xlim=(np.datetime64(&#39;2000-01-01&#39;), np.datetime64(&#39;2050-01-01&#39;)),
    xlocator=(&#39;year&#39;, 10), xformatter=&#39;\&#39;%y&#39;, title=&#39;Ticks every N units&#39;,
)

# Minor ticks every 10 minutes, major every 2 minutes
axs[3].format(
    xlim=(np.datetime64(&#39;2000-01-01T00:00:00&#39;), np.datetime64(&#39;2000-01-01T12:00:00&#39;)),
    xlocator=(&#39;hour&#39;, range(0, 24, 2)), xminorlocator=(&#39;minute&#39;, range(0, 60, 10)),
    xformatter=&#39;T%H:%M:%S&#39;, title=&#39;Ticks at specific intervals&#39;,
)

# Month and year labels, with default tick label rotation
axs[4].format(
    xlim=(np.datetime64(&#39;2000-01-01&#39;), np.datetime64(&#39;2008-01-01&#39;)),
    xlocator=&#39;year&#39;, xminorlocator=&#39;month&#39;,  # minor ticks every month
    xformatter=&#39;%b %Y&#39;, title=&#39;Ticks with default rotation&#39;,
)
axs.format(
    ylocator=&#39;null&#39;, suptitle=&#39;Datetime locators and formatters demo&#39;
)
plot.rc.reset()
plt.savefig(r&#39;E:\Data_resourses\DataCharm 公众号\Python\学术图表绘制\ProPlot\datetick.png&#39;,
             dpi=900)

效果如下:Toujours ennuyé par les paramètres de calque fastidieux de Matplotlib ! ? Venez jeter un œil à cette boîte à outils de dessin Python

以上是我认为ProPlot 比较优秀的几点,当然,大家也可以自行探索,发现自己喜欢的技巧。

ProPlot 实例演示

我们使用之前的推文数据进行实例操作,详细代码如下:

#开始绘图
labels = [&#39;L1&#39;, &#39;L2&#39;, &#39;L3&#39;, &#39;L4&#39;, &#39;L5&#39;]
data_a = [20, 34, 30, 35, 27]
data_b = [25, 32, 34, 20, 25]
data_c = [12, 20, 24, 17, 16]

x = np.arange(len(labels))
width = .25
fig, axs = plot.subplots(ncols=2, nrows=1, sharey=1, width=10,height=4)
#for mark, data in zip()
axs[0].plot(x,y1, marker=&#39;s&#39;,c=&#39;k&#39;,lw=.5,label=&#39;D1&#39;,markersize=8)
axs[0].plot(x,y2, marker=&#39;s&#39;,c=&#39;k&#39;,ls=&#39;--&#39;,lw=.5,markersize=8,markerfacecolor=&#39;white&#39;,markeredgewidth=.4,label=&#39;D2&#39;)
axs[0].plot(x,y3,marker=&#39;^&#39;,c=&#39;k&#39;,lw=.5,markersize=8,markerfacecolor=&#39;dimgray&#39;,markeredgecolor=&#39;dimgray&#39;,
                     label=&#39;D3&#39;)
axs[0].plot(x,y4,marker=&#39;^&#39;,c=&#39;k&#39;,lw=.5,markersize=8,label=&#39;D4&#39;)

axs[1].bar(x-width/2, data_a,width,label=&#39;category_A&#39;,color=&#39;#130074&#39;,ec=&#39;black&#39;,lw=.5)
axs[1].bar(x+width/2, data_b, width,label=&#39;category_B&#39;,color=&#39;#CB181B&#39;,ec=&#39;black&#39;,lw=.5)
axs[1].bar(x+width*3/2, data_c,width,label=&#39;category_C&#39;,color=&#39;#008B45&#39;,ec=&#39;black&#39;,lw=.5)

#先对整体进行设置
axs.format(ylim=(0,40),
    xlabel=&#39;&#39;, ylabel=&#39;Values&#39;,
    abc=True, abcloc=&#39;ur&#39;, abcstyle=&#39;(A)&#39;,abcsize=13,
    suptitle=&#39;ProPlot Exercise&#39;
)
#再对每个子图进行设置
axs[0].format(ylim=(10,40),title=&#39;Multi-category scatter plot&#39;)
axs[1].format(title=&#39;Multi-category bar plot&#39;,xticklabels=[&#39;L1&#39;, &#39;L2&#39;, &#39;L3&#39;, &#39;L4&#39;, &#39;L5&#39;])

plt.savefig(r&#39;E:\Data_resourses\DataCharm 公众号\Python\学术图表绘制\ProPlot\test_01.png&#39;,
            dpi=900)
plt.show()

效果如下:Toujours ennuyé par les paramètres de calque fastidieux de Matplotlib ! ? Venez jeter un œil à cette boîte à outils de dessin Python

只是简单的绘制,其他的设置也需要熟悉绘图函数,这里就给大家做个简单的演示。

总结

本期推文我们介绍了matplotlib非常优秀的科学图表绘图库PrpPlot, 在一定程度上极大了缩减了定制化绘制时间,感兴趣的同学可以持续关注这个库,当然,还是最好在熟悉matplotlib基本绘图函数及图层属性设置函数的基础上啊。

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer