>  기사  >  백엔드 개발  >  Matplotlib의 번거로운 레이어 설정이 아직도 짜증나네요! ? 와서 이 Python 그리기 도구 키트를 살펴보세요.

Matplotlib의 번거로운 레이어 설정이 아직도 짜증나네요! ? 와서 이 Python 그리기 도구 키트를 살펴보세요.

Python当打之年
Python当打之年앞으로
2023-08-10 16:00:111281검색


matplotlib의 복잡한 그리기 속성 설정이 헷갈리시나요? 특정 레이어 설정 기능이 기억나지 않는 경우가 많아 길고 지루한 API 문서를 억지로 읽어야 하시나요? 아니면 여러 matplotlib 하위 플롯에 직면할 때 속성을 설정하기 위해 많은 루프 코드를 작성하고 있습니까? 마지막으로, 하나의 Python 그리기 패키지만 숙달하면 모든 2차원, 공간 및 기타 유형의 차트 그리기 방법을 마스터할 수 있기를 바라십니까? ? 게다가 무기력함과 불만도 많으시죠? 어쨌든 위에 나열된 사항은 matplotlib를 사용하여 차트를 사용자 정의할 때 가장 큰 느낌입니다. 물론 이 트윗은 불평하는 것이 아니라 좋은 솔루션을 제공하기 위한 것입니다. 오늘의 주인공, 프로플롯(ProPlot)을 소개하겠습니다. 솔직히! 이 패키지를 처음 발견했을 때: "어? 네, 로고가 matplotlib와 매우 유사합니다." 하지만 대부분의 matplotlib 그림에 익숙해지고 자주 사용했을 때, 돌아와서 이 도구 패키지를 보았을 때: " 나리 , 향이 너무 좋아요! 내가 전에 뭘 했었나요? 빨리 써보세요!”. 요컨대, 이전 트윗이 사진 때문에 SCI에 의해 여러 번 수정되었다면! ? 이 Python 과학 드로잉 보물 도구 키트를 사용하면 과학 출판 수준의 그림 형식을 한 단계로 설정할 수 있다는 사실을 발견하지 못했기 때문에 이 트윗에서는 지루한 사용자 정의 드로잉 요구 사항을 달성하기 위해 더 적은 코드를 사용하는 방법을 알려줄 것입니다. 또한 출판 요구 사항을 충족하는 다이어그램입니다. 주요 내용은 다음과 같습니다.
  • ProPlot 라이브러리 소개
  • ProPlot 예제 데모

ProPlot 라이브러리 소개

차트를 그리려면 기본 색상 및 형식 테마는 그리기 기능에 익숙해지는 데에만 도움이 될 수 있지만 뛰어난 시각화 작품(출판 수준이든 약간 예술적이든)을 디자인하려면 많은 주제에 익숙해져야 합니다. 색상, 배율, 축, 글꼴 등과 같은 그리기 기능을 여러 하위 플롯으로 그릴 때 이러한 작업은 코드 작성 시간을 늘리지 않고도 많은 에너지를 소모하며 오류가 발생하기 쉽습니다. 자세한 내용은 이전 기사 Python-matplotlib Academic Scatter Chart EE 통계 및 그리기 및 Python-matplotlib 가로 누적 세로 막대형 차트 그리기를 확인하세요. 또한 매일 그림을 그리기 위해 matplotlib를 사용해야 하고 종종 차트를 아름답게 해야 하는 경우 Proplot 그리기 패키지가 적합하며 이에 적응하지 못할까 봐 걱정하지 마세요. , 이는 그리기 기능을 크게 단순화합니다. 아래에서는 설치 및 주요 사용방법에 대해 간략히 소개하겠습니다. 더 자세한 내용을 알고 싶으시면 공식 홈페이지를 방문하시면 됩니다.

Installation

pip이나 conda을 이용하여 직접 설치할 수도 있고,

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

물론 지속적인 버전 업데이트로 인해 업데이트 처리를 위해 다음 코드를 사용할 수도 있습니다. :

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

format()은 코드를 단순화합니다

Proplot은 matplotlib처럼 모든 플롯 속성을 설정할 필요가 없습니다. format() 함수는 모든 설정을 한 번에 변경할 수 있는 형식 지정 방법을 제공합니다. 먼저 다음과 같은 간단한 예를 들어보겠습니다.

  • Use matplotlib to draw
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')

이 간단한 예에서 Proplot의 단순성을 확인할 수 있습니다.

A-b-c 여러 개의 하위 사진 일련 번호가 추가됩니다

코드 양을 크게 줄여주는 위의 format() 외에도 더 편리하다고 생각되는 그리기 방법을 소개했습니다 - 여러 개의 하위 사진 일련번호가 자동으로 추가됩니다. 구체적인 예는 다음과 같습니다.

# 样本数据
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)

효과는 다음과 같습니다. Matplotlib의 번거로운 레이어 설정이 아직도 짜증나네요! ? 와서 이 Python 그리기 도구 키트를 살펴보세요.

일련번호에 대한 스타일(abcstyle), 위치(abcloc), 크기(abcsize) 등을 설정할 수도 있습니다. 기타 자세한 설정은 공식 홈페이지를 참고해주세요.

Colorbars and legends

  • axis Colorbars and legends
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)

효과는 다음과 같습니다.Matplotlib의 번거로운 레이어 설정이 아직도 짜증나네요! ? 와서 이 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)

效果如下:Matplotlib의 번거로운 레이어 설정이 아직도 짜증나네요! ? 와서 이 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)

效果如下:Matplotlib의 번거로운 레이어 설정이 아직도 짜증나네요! ? 와서 이 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()

效果如下:Matplotlib의 번거로운 레이어 설정이 아직도 짜증나네요! ? 와서 이 Python 그리기 도구 키트를 살펴보세요.

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

总结

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

위 내용은 Matplotlib의 번거로운 레이어 설정이 아직도 짜증나네요! ? 와서 이 Python 그리기 도구 키트를 살펴보세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 Python当打之年에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제