Ich ärgere mich immer noch über die umständlichen Ebeneneinstellungen von Matplotlib! ? Schauen Sie sich dieses Python-Zeichen-Toolkit an

Freigeben: 2023-08-10 16:00:11
nach vorne
1359 Leute haben es durchsucht


Sind Sie durch die komplizierten Zeichnungsattributeinstellungen von Matplotlib verwirrt? Sind Sie gezwungen, lange und langweilige API-Dokumente zu lesen, weil Sie sich oft nicht an eine bestimmte Layer-Einstellungsfunktion erinnern können? Oder schreiben Sie viel Schleifencode, um Eigenschaften festzulegen, wenn Sie mit mehreren Matplotlib-Unterhandlungen konfrontiert sind? Hoffen Sie schließlich immer noch, dass Sie alle zweidimensionalen, räumlichen und anderen Arten von Diagrammzeichnungsmethoden beherrschen, indem Sie nur ein Python-Zeichenpaket beherrschen? ? Darüber hinaus gibt es viel Hilflosigkeit und Beschwerden. Ich frage mich, ob es Ihnen so geht? Wie auch immer, die oben aufgeführten Punkte sind meine größten Gefühle, wenn ich Matplotlib zum Anpassen von Diagrammen verwende. Natürlich geht es bei diesem Tweet nicht darum, mich zu beschweren, sondern Ihnen gute Lösungen anzubieten. Lassen Sie uns den heutigen Protagonisten vorstellen: ProPlot. Ernsthaft! Als ich dieses Paket zum ersten Mal entdeckte: „Häh? Ja, das Logo ist Matplotlib sehr ähnlich.“ Als ich jedoch mit den meisten Matplotlib-Zeichnungen vertraut wurde und es oft verwendete, kam ich zurück und schaute mir dieses Toolpaket an: „ Ich finde, es riecht so gut! Was habe ich vorher gemacht? Kurz gesagt, wenn der vorherige Tweet aufgrund der Bilder mehrfach von SCI überarbeitet wurde! ? Da Sie noch nicht herausgefunden haben, dass Sie mit diesem Python-Toolkit für wissenschaftliche Zeichnungen in einem Schritt Abbildungsformate auf Sci-Publikationsebene einrichten können, erfahren Sie in diesem Tweet, wie Sie mit weniger Code mühsame benutzerdefinierte Zeichnungsanforderungen erfüllen können ist auch ein Diagramm, das die Veröffentlichungsanforderungen erfüllt. Der Hauptinhalt lautet wie folgt:
  • Einführung in die ProPlot-Bibliothek
  • ProPlot-Beispieldemonstration

Einführung in die ProPlot-Bibliothek

Bei Verwendung von Python-matplotlib Um Diagramme zu zeichnen, können uns die standardmäßigen Farb- und Formatthemen nur dabei helfen, uns mit den Zeichenfunktionen vertraut zu machen. Wenn Sie jedoch hervorragende Visualisierungsarbeiten entwerfen möchten (sei es auf Veröffentlichungsniveau oder leicht künstlerisch), müssen Sie mit einer großen Anzahl davon vertraut sein Zeichenfunktionen wie

Farbe, Skalierung, Achse, Schriftart usw., wenn es um das Zeichnen mehrerer Unterplots geht, kosten uns diese Vorgänge viel Energie, ohne langes Schreiben von Code zu verursachen, und sind außerdem fehleranfällig Weitere Informationen finden Sie in meinem vorherigen Artikel „Python-matplotlib Academic Scatter Chart EE Statistics and Drawing“ und „Python-matplotlib Horizontal Stacked Column Chart Drawing“. Wenn Sie außerdem jeden Tag Matplotlib zum Zeichnen verwenden und häufig Diagramme verschönern müssen, ist das Zeichenpaket „Proplot“ perfekt für Sie, und Sie müssen sich keine Sorgen machen, dass Matplotlib nicht in der Lage ist, sich daran anzupassen , was die Zeichenfunktion erheblich vereinfacht. Im Folgenden stellen wir kurz die Installation und die wichtigsten Verwendungsmethoden vor. Wenn Sie mehr darüber erfahren möchten, können Sie die offizielle Website besuchen.

Installation

Wir können pip oder conda direkt verwenden, um direkt zu installieren,

#for pip
pip install proplot
#for conda
conda install -c conda-forge proplot
Nach dem Login kopieren

Aufgrund der kontinuierlichen Aktualisierung der Version können Sie natürlich auch den folgenden Code für die Aktualisierungsverarbeitung verwenden :

#for pip
pip install --upgrade proplot
#for conda
conda upgrade proplot
Nach dem Login kopieren

format() vereinfacht den Code

Proplot muss nicht jede Ploteigenschaft festlegen, wie dies bei Matplotlib der Fall ist. Die Funktion format() bietet eine Formatierungsmethode, um alle Einstellungen auf einmal zu ändern. Nehmen wir zunächst ein einfaches Beispiel wie folgt:

  • Verwenden Sie Matplotlib zum Zeichnen.
  • A-b-c Mehrere Unterbild-Seriennummern werden hinzugefügt

Zusätzlich zum oben genannten

format()

, das die Codemenge erheblich reduziert, haben wir eine Zeichenmethode eingeführt, die meiner Meinung nach bequemer ist. Mehrere Unterbild-Seriennummern werden automatisch hinzugefügt. Das konkrete Beispiel lautet wie folgt:
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')
Nach dem Login kopieren
Der Effekt ist wie folgt:

Sie können auch den Stil (abcstyle), die Position (abcloc), die Größe (abcsize) usw. für die Seriennummer festlegen. Weitere detaillierte Einstellungen finden Sie auf der offiziellen Website.

Farbbalken und LegendenIch ärgere mich immer noch über die umständlichen Ebeneneinstellungen von Matplotlib! ? Schauen Sie sich dieses Python-Zeichen-Toolkit an

Achsen-Farbbalken und Legenden
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')
Nach dem Login kopieren
Der Effekt ist wie folgt:

    • 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)
    Nach dem Login kopieren

    效果如下:Ich ärgere mich immer noch über die umständlichen Ebeneneinstellungen von Matplotlib! ? Schauen Sie sich dieses Python-Zeichen-Toolkit an

    时间刻度(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)
    Nach dem Login kopieren

    效果如下:Ich ärgere mich immer noch über die umständlichen Ebeneneinstellungen von Matplotlib! ? Schauen Sie sich dieses Python-Zeichen-Toolkit an

    以上是我认为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()
    Nach dem Login kopieren

    效果如下:Ich ärgere mich immer noch über die umständlichen Ebeneneinstellungen von Matplotlib! ? Schauen Sie sich dieses Python-Zeichen-Toolkit an

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

    总结

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

Das obige ist der detaillierte Inhalt vonIch ärgere mich immer noch über die umständlichen Ebeneneinstellungen von Matplotlib! ? Schauen Sie sich dieses Python-Zeichen-Toolkit an. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:Python当打之年
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!