آموزش گام به گام رسم نمودار در پایتون با چند کتابخانه مختلف

2171
رسم نمودار در پایتون با کتابخانه‌های Matplotlib و Seaborn

رسم نمودار در پایتون یکی از بهترین روش‌ها برای درک بهتر داده‌ها و ارائه آن‌ها به شکلی جذاب است. بسیاری از افراد مبتدی در شروع کار با این حوزه با چالش‌هایی روبرو می‌شوند و نمی‌دانند از کجا شروع کنند. ما در این مقاله قصد داریم تا با یک رویکرد گام به گام و عملی، شما را با دنیای رسم نمودار در پایتون آشنا کنیم و نشان دهیم که این کار چقدر می‌تواند آسان و کاربردی باشد. پس اگر به آموزش برنامه نویسی و مخصوصا آموزش پایتون علاقه‌مندید و می‌خواهید مهارت‌های خود را در زمینه تحلیل داده و مصورسازی ارتقا دهید، با ما همراه باشید.

ابزارها و کتابخانه‌های رسم نمودار در پایتون

پایتون اکوسیستم بسیار گسترده‌ای دارد و برای رسم نمودار نیز کتابخانه‌های متنوع و قدرتمندی در اختیار ما قرار می‌دهد. موارد زیر از مهمترین ابزارهای رسم نمودار در پایتون هستند:

  • Matplotlib: این کتابخانه، پایه‌ و اساس بسیاری از کتابخانه‌های دیگر رسم نمودار در پایتون است. Matplotlib انعطاف‌پذیری بالایی دارد و به شما امکان می‌دهد تا انواع مختلفی از نمودارها مانند نمودارهای خطی، نقطه‌ای، میله‌ای، هیستوگرام، دایره‌ای و غیره را با جزئیات دقیق رسم کنید.
  • Seaborn: این کتابخانه بر پایه Matplotlib ساخته شده و هدف آن، رسم نمودارهای آماری جذاب و informative با استفاده از دستورات ساده‌تر است. این کتابخانه به خوبی با ساختارهای داده‌ای Pandas ادغام می‌شود و برای تحلیل داده‌های پیچیده‌تر و نمایش روابط بین متغیرها بسیار مناسب است.
  • Plotly: پلوتی یک کتابخانه تعاملی برای رسم نمودار است. نمودارهایی که با Plotly رسم می‌شوند، قابلیت بزرگنمایی، جابجایی، نمایش اطلاعات بیشتر با هاور کردن ماوس و حتی انیمیشن دارند
  • Bokeh: بوکه نیز یکی دیگر از کتابخانه‌های رسم نمودار تعاملی در پایتون است که بر روی مرورگرهای وب تمرکز دارد. Bokeh به شما اجازه می‌دهد تا نمودارهای پیچیده و بزرگ را به صورت تعاملی نمایش دهید و با داده‌ها به شکل بصری درگیر شوید.

برای نصب هر کتابخانه به صورت ساده باید از دستور زیر در ترمینال استفاده کرد.

pip install [نام کتابخانه]

نکته مهم:

 مواردی که در این مطلب آموزش داده می‌شود فقط بخش کوتاهی از قابلیت رسم نمودار در پایتون است و این نوشته در واقع فقط مقدمات این کار را با سه کتابخانه Matplotlib ، Seaborn  و Plotly به شما آموزش می‌دهد. برای کسب دانش حرفه‌ای در این زمینه پیشنهاد می‌کنیم سری به دوره‌های آموزش پایتون کوئرا بیندازید و دوره متناسب با نیاز خود را انتخاب کنید.

آموزش رسم نمودار در پایتون با کتابخانه Matplotlib

در این بخش، به صورت عملی نحوه رسم انواع نمودارهای رایج را با استفاده از کتابخانه Matplotlib آموزش خواهیم داد. برای شروع، ابتدا باید کتابخانه مد نظر را با دستور زیر نصب کنیم:

pip install Matplotlib

سپس باید یک مجموعه داده فرضی ایجاد کنیم که بتوانیم از آن در مثال‌های مختلف استفاده کنیم.

ایجاد یک مجموعه داده فرضی

فرض کنید ما داده‌های مربوط به فروش سه محصول مختلف در طول یک سال را داریم. این داده‌ها را به صورت لیست‌هایی در پایتون ذخیره می‌کنیم:

import matplotlib.pyplot as plt

import numpy as np

# داده های فروش برای سه محصول (به میلیون تومان)

sales_product_a = [35, 42, 51, 62, 70, 65, 72, 80, 75, 68, 78, 85]

sales_product_b = [20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75]

sales_product_c = [15, 18, 22, 25, 28, 30, 35, 40, 38, 42, 45, 50]

# ماه های سال

months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']

در این قطعه کد، ما سه لیست به نام‌های sales_product_a, sales_product_b, و sales_product_c داریم که نشان‌دهنده فروش هر محصول در طول 12 ماه سال هستند. همچنین یک لیست به نام months داریم که نام ماه‌ها را ذخیره کرده است.

نکته: مجموعه داده را همچنین می‌توان از منابع خارجی مانند فایل‌های اکسل یا دیتابیس‌های مختلف به پروژه ایمپورت کرد.

رسم نمودار خطی با Matplotlib

نمودار خطی برای نمایش تغییرات یک متغیر در طول زمان یا در برابر متغیر دیگر بسیار مناسب است. برای رسم نمودار خطی فروش محصولات در طول سال با استفاده از Matplotlib، مراحل زیر را دنبال می‌کنیم:

  1. ایجاد یک فیگور و محورها: در Matplotlib، نمودارها در داخل یک فیگور (Figure) رسم می‌شوند و هر فیگور می‌تواند شامل یک یا چند محور (Axes) باشد. محورها در واقع ناحیه‌ای هستند که داده‌ها در آن رسم می‌شوند.
fig, ax = plt.subplots(figsize=(10, 6))

در اینجا، ما یک فیگور و یک محور ایجاد کرده‌ایم. figsize اندازه فیگور را تعیین می‌کند.

  1. رسم داده‌ها بر روی محور: از متد plot()‎ برای رسم داده‌ها استفاده می‌کنیم. می‌توانیم چندین خط را بر روی یک محور رسم کنیم.
ax.plot(months, sales_product_a, label='Product A', marker='o')

ax.plot(months, sales_product_b, label='Product B', marker='s')

ax.plot(months, sales_product_c, label='Product C', marker='^')

در اینجا، ما فروش هر سه محصول را در برابر ماه‌ها رسم کرده‌ایم. آرگومان label برای تعیین برچسب هر خط در راهنما (legend) استفاده می‌شود و marker شکل نشانگرهای نقاط داده را تعیین می‌کند.

  1. تنظیمات نمودار: برای اینکه نمودار ما خواناتر و جذاب‌تر باشد، می‌توانیم تنظیمات مختلفی را اعمال کنیم، از جمله:
    • عنوان نمودار:
ax.set_title('Sales Trend of Products Over the Year')
  1. برچسب‌های محورها:
ax.set_xlabel('Month')

ax.set_ylabel('Sales (Million Tomans)')
  1. نمایش راهنما:
ax.legend()
  1. نمایش خطوط شبکه:
ax.grid(True)

نمایش نمودار: در نهایت، از تابع show() برای نمایش نمودار استفاده می‌کنیم.

    plt.show()

    با اجرای این کد، یک نمودار خطی خواهید دید که روند فروش هر سه محصول را در طول ماه‌های سال نشان می‌دهد. خروجی نهایی ما به صورت زیر است:

    رسم نمودار خطی با Matplotlib

    رسم نمودار میله‌ای با Matplotlib

    نمودار میله‌ای برای مقایسه مقادیر مختلف در دسته‌های مختلف بسیار مناسب است. فرض کنید می‌خواهیم مجموع فروش هر محصول در طول سال را با یکدیگر مقایسه کنیم.

    1. محاسبه مجموع فروش: ابتدا مجموع فروش هر محصول را محاسبه می‌کنیم:
    total_sales_a = sum(sales_product_a)
    
    total_sales_b = sum(sales_product_b)
    
    total_sales_c = sum(sales_product_c)
    
    products = ['Product A', 'Product B', 'Product C']
    
    total_sales = [total_sales_a, total_sales_b, total_sales_c]
    1. رسم نمودار میله‌ای: از متد bar()‎ برای رسم نمودار میله‌ای استفاده می‌کنیم.
    fig, ax = plt.subplots(figsize=(8, 6))
    
    ax.bar(products, total_sales, color=['skyblue', 'lightcoral', 'lightgreen'])

    در اینجا، products بر روی محور x و total_sales ارتفاع میله‌ها را تعیین می‌کنند. color رنگ میله‌ها را مشخص می‌کند.

    1. تنظیمات نمودار:
    ax.set_title('Total Sales per Product (Yearly)')
    
    ax.set_xlabel('Product')
    
    ax.set_ylabel('Total Sales (Million Tomans)')
    
    plt.show()

    با اجرای این کد، یک نمودار میله‌ای خواهید دید که مجموع فروش هر محصول را به صورت جداگانه نمایش می‌دهد و امکان مقایسه آن‌ها را فراهم می‌کند. این بار خروجی ما به صورت زیر خواهد بود.

    رسم نمودار میله ای با Matplotlib

    رسم نمودار نقطه‌ای با Matplotlib

    نمودار نقطه‌ای برای نمایش رابطه بین دو متغیر کمی استفاده می‌شود. فرض کنید ما داده‌های مربوط به میزان تبلیغات و فروش یک محصول را داریم.

    # میزان تبلیغات (به میلیون تومان)
    
    advertising = [10, 15, 12, 18, 20, 22, 25, 28, 30, 32]
    
    # میزان فروش (به میلیون تومان)
    
    sales = [40, 55, 50, 65, 70, 75, 80, 85, 90, 95]
    1. رسم نمودار نقطه‌ای: از متد scatter()‎ برای رسم نمودار نقطه‌ای استفاده می‌کنیم.
    fig, ax = plt.subplots(figsize=(8, 6))
    
    ax.scatter(advertising, sales, color='purple', marker='*')

    در اینجا، advertising مقادیر محور x و sales مقادیر محور y را تعیین می‌کنند.

    1. تنظیمات نمودار:
    ax.set_title('Relationship between Advertising and Sales')
    
    ax.set_xlabel('Advertising (Million Tomans)')
    
    ax.set_ylabel('Sales (Million Tomans)')
    
    ax.grid(True)
    
    plt.show()

    این کد یک نمودار نقطه‌ای ایجاد می‌کند که نشان می‌دهد چگونه میزان فروش با میزان تبلیغات مرتبط است. این بار خورجی ما به صورت زیر خواهد بود.

    رسم نمودار نقطه ای با پایتون

    این تنها چند نمونه از نمودارهایی است که می‌توانید با استفاده از Matplotlib رسم کنید. این کتابخانه امکانات بسیار گسترده‌تری را در اختیار شما قرار می‌دهد و با کمی تمرین می‌توانید نمودارهای بسیار پیچیده و سفارشی‌سازی شده‌ای ایجاد کنید.

    آموزش رسم نمودار در پایتون با کتابخانه Seaborn

    برای شروع، مطمئن شوید که کتابخانه Seaborn را نصب کرده‌اید. اگر نصب نیست، می‌توانید از pip استفاده کنید:

    pip install seaborn

    پس از نصب، می‌توانید آن را در اسکریپت پایتون خود import کنید:

    import seaborn as sns
    
    import matplotlib.pyplot as plt
    
    import pandas as pd

    همان مجموعه داده فرضی فروش محصولات را که در بخش قبل ایجاد کردیم، در نظر بگیرید. برای کارآمدتر بودن با Seaborn، بهتر است این داده‌ها را به یک Pandas DataFrame تبدیل کنیم:

    data = {
    
        'Month': months * 3,
    
        'Product': ['Product A'] * 12 + ['Product B'] * 12 + ['Product C'] * 12,
    
        'Sales': sales_product_a + sales_product_b + sales_product_c
    
    }
    
    df = pd.DataFrame(data)
    
    print(df.head())

    این DataFrame شامل سه ستون ‘Month’، ‘Product’ و ‘Sales’ است و ساختاری مناسب برای استفاده در Seaborn دارد.

    رسم نمودار خطی با Seaborn

    برای رسم نمودار خطی روند فروش محصولات با استفاده از Seaborn، می‌توانیم از تابع lineplot() استفاده کنیم:

    plt.figure(figsize=(10, 6))
    
    sns.lineplot(x='Month', y='Sales', hue='Product', data=df, marker='o')
    
    plt.title('Sales Trend of Products Over the Year (Seaborn)')
    
    plt.xlabel('Month')
    
    plt.ylabel('Sales (Million Tomans)')
    
    plt.grid(True)
    
    plt.legend(title='Product')
    
    plt.show()

    در این کد:

    • x=’Month’ و y=’Sales’ ستون‌های مربوط به محورهای افقی و عمودی را تعیین می‌کنند.
    • hue=’Product’ باعث می‌شود که برای هر مقدار یکتا در ستون ‘Product’ یک خط جداگانه با رنگ متفاوت رسم شود و یک راهنما نیز به طور خودکار ایجاد شود.
    • data=df DataFrame مورد استفاده را مشخص می‌کند.
    • marker=’o’ نشانگرها را برای نقاط داده نمایش می‌دهد.

    خروجی کد ما به صورت زیر است:

    رسم نمودار خطی با Seaborn

    همانطور که می‌بینید، با استفاده از Seaborn، رسم یک نمودار خطی چندگانه بسیار ساده‌تر و سریع‌تر انجام می‌شود و ظاهر پیش‌فرض نمودار نیز معمولاً جذاب‌تر است.

    رسم نمودار میله‌ای با Seaborn

    برای رسم نمودار میله‌ای مجموع فروش هر محصول با Seaborn، می‌توانیم از تابع barplot()‎ استفاده کنیم:

    total_sales_df = df.groupby('Product')['Sales'].sum().reset_index()
    
    plt.figure(figsize=(8, 6))
    
    sns.barplot(x='Product', y='Sales', data=total_sales_df, palette='viridis')
    
    plt.title('Total Sales per Product (Yearly - Seaborn)')
    
    plt.xlabel('Product')
    
    plt.ylabel('Total Sales (Million Tomans)')
    
    plt.show()

    خروجی کد ما به صورت زیر است:

    رسم نمودار میله‌ای با Seaborn

    در این کد:

    • ابتدا با استفاده از groupby()‎ و sum()‎ در Pandas، مجموع فروش هر محصول را محاسبه کرده و یک DataFrame جدید به نام total_sales_df ایجاد می‌کنیم.
    • سپس از barplot()‎ برای رسم نمودار میله‌ای استفاده می‌کنیم. palette یک آرگومان برای تعیین پالت رنگی میله‌ها است.

    رسم نمودار جعبه‌ای با Seaborn

    نمودار جعبه‌ای برای نمایش توزیع داده‌ها و شناسایی مقادیر پرت (outlier) در گروه‌های مختلف بسیار مفید است. فرض کنید می‌خواهیم توزیع فروش هر محصول در طول ماه‌های سال را با هم مقایسه کنیم.

    plt.figure(figsize=(10, 6))
    
    sns.boxplot(x='Product', y='Sales', data=df, palette='pastel')
    
    plt.title('Sales Distribution per Product (Seaborn)')
    
    plt.xlabel('Product')
    
    plt.ylabel('Sales (Million Tomans)')
    
    plt.show()

    خروجی کد فوق به صورت زیر است:

    رسم نمودار جعبه‌ای با Seaborn

    در این نمودار:

    • جعبه (Box) محدوده بین چارک اول (Q1) و چارک سوم (Q3) داده‌ها را نشان می‌دهد.
    • خط داخل جعبه میانه (Median) داده‌ها را نشان می‌دهد.
    • خطوط عمودی خارج از جعبه (Whiskers) معمولاً 1.5 برابر دامنه بین چارکی (IQR) را پوشش می‌دهند و نقاط خارج از این خطوط به عنوان مقادیر پرت در نظر گرفته می‌شوند.

    Seaborn توابع بسیار دیگری نیز برای رسم انواع نمودارهای آماری مانند نمودارهای هیستوگرام (histplot()‎)، نمودارهای تراکمی (kdeplot()‎)، نمودارهای نقطه‌ای با حاشیه توزیع (jointplot()‎) و نمودارهای ماتریس همبستگی (heatmap()) ارائه می‌دهد که برای تحلیل داده‌ها بسیار ارزشمند هستند.

    آموزش رسم نمودار در پایتون با کتابخانه Plotly

    برای رسم نمودار با پایتون با Plotly، ابتدا باید آن را نصب کنید. می‌توانید از pip برای نصب آن استفاده کنید:

    pip install plotly

    پس از نصب، می‌توانید ماژول‌های مورد نیاز را import کنید:

    import plotly.graph_objects as go
    
    from plotly.subplots import make_subplots
    
    import pandas as pd

    دوباره همان DataFrame فروش محصولات را که قبلاً ایجاد کردیم، در نظر بگیرید:

    data = {
    
        'Month': months * 3,
    
        'Product': ['Product A'] * 12 + ['Product B'] * 12 + ['Product C'] * 12,
    
        'Sales': sales_product_a + sales_product_b + sales_product_c
    
    }
    
    df = pd.DataFrame(data)

    رسم نمودار خطی با Plotly

    برای رسم نمودار خطی تعاملی روند فروش محصولات با استفاده از Plotly، می‌توانیم از شیء go.Figure و متد add_trace با نوع go.Scatter استفاده کنیم:

    fig = go.Figure()
    
    for product in df['Product'].unique():
    
        product_data = df[df['Product'] == product]
    
        fig.add_trace(go.Scatter(x=product_data['Month'], y=product_data['Sales'],
    
                                 mode='lines+markers', name=product))
    
    fig.update_layout(title='Sales Trend of Products Over the Year (Plotly)',
    
                      xaxis_title='Month',
    
                      yaxis_title='Sales (Million Tomans)')
    
    fig.show()

    خروجی کد فوق ما به صورت زیر است:

    رسم نمودار خطی با Plotly

    در این کد:

    • ما یک شیء go.Figure ایجاد می‌کنیم که نمایانگر کل نمودار است.
    • سپس، برای هر محصول یک trace (رد) جداگانه با استفاده از go.Scatter اضافه می‌کنیم.
      • x و y ستون‌های مربوط به محورها را تعیین می‌کنند.
      • mode=’lines+markers’ هم خطوط و هم نشانگرها را نمایش می‌دهد.
      • name برچسب خط در راهنما را تعیین می‌کند.
    • update_layout برای تنظیم عنوان نمودار و برچسب‌های محورها استفاده می‌شود.
    • fig.show()‎ نمودار را در یک پنجره مرورگر یا در محیط Jupyter Notebook نمایش می‌دهد و قابلیت‌های تعاملی آن فعال است.

    رسم نمودار میله‌ای تعاملی با Plotly

    برای رسم نمودار میله‌ای تعاملی مجموع فروش هر محصول با Plotly، می‌توانیم از go.Bar استفاده کنیم:

    total_sales_df = df.groupby('Product')['Sales'].sum().reset_index()
    
    fig = go.Figure(data=[go.Bar(x=total_sales_df['Product'], y=total_sales_df['Sales'])])
    
    fig.update_layout(title='Total Sales per Product (Yearly - Plotly)',
    
                      xaxis_title='Product',
    
                      yaxis_title='Total Sales (Million Tomans)')
    
    fig.show()

    خروجی کد ما به صورت زیر است:

    رسم نمودار میله‌ای تعاملی با Plotly

    در اینجا، ما یک لیست از trace‌ها را به go.Figure می‌دهیم که در این مورد فقط یک trace از نوع go.Bar داریم.

    رسم نمودارهای فرعی با Plotly

    Plotly امکان رسم چندین نمودار در یک فیگور را با استفاده از make_subplots فراهم می‌کند. فرض کنید می‌خواهیم روند فروش هر محصول را در یک نمودار جداگانه نمایش دهیم.

    fig = make_subplots(rows=3, cols=1, shared_xaxes=True,
    
                        subplot_titles=('Sales Trend of Product A',
    
                                        'Sales Trend of Product B',
    
                                        'Sales Trend of Product C'))
    
    for i, product in enumerate(df['Product'].unique()):
    
        product_data = df[df['Product'] == product]
    
        fig.add_trace(go.Scatter(x=product_data['Month'], y=product_data['Sales'],
    
                                 mode='lines+markers', name=product, showlegend=False),
    
                      row=i+1, col=1)
    
    fig.update_layout(title='Sales Trend of Products Over the Year (Separate Plots - Plotly)',
    
                      xaxis_title='Month',
    
                      yaxis_title='Sales (Million Tomans)')
    
    fig.show()

    خروجی کد فوق به صورت زیر است:

    رسم نمودارهای فرعی با Plotly

    در این کد:

    • make_subplots(rows=3, cols=1) یک فیگور با 3 ردیف و 1 ستون برای نمودارها ایجاد می‌کند.
    • shared_xaxes=True باعث می‌شود که محور x برای همه نمودارها یکسان باشد.
    • subplot_titles عناوین جداگانه‌ای برای هر نمودار فرعی تعیین می‌کند.
    • در حلقه، برای هر محصول یک trace خطی اضافه می‌کنیم و با استفاده از row و col موقعیت آن را در فیگور مشخص می‌کنیم. showlegend=False از نمایش راهنما در هر نمودار فرعی جلوگیری می‌کند زیرا عنوان هر نمودار به اندازه کافی گویا است.

    Plotly همچنین امکان ایجاد انواع دیگر نمودارهای تعاملی مانند نمودارهای پراکندگی سه بعدی، نمودارهای دایره‌ای تعاملی، نمودارهای جغرافیایی و غیره را فراهم می‌کند.

    مصورسازی داده‌ها با پایتون: کلید درک عمیق‌تر و ارائه مؤثرتر

    در این سفر آموزشی، با سه کتابخانه قدرتمند Matplotlib، Seaborn و Plotly برای رسم نمودار در پایتون آشنا شدیم. Matplotlib به عنوان پایه و اساس، کنترل کاملی بر جزئیات بصری نمودارها ارائه می‌دهد، در حالی که Seaborn با تمرکز بر نمودارهای آماری، فرآیند مصورسازی داده‌ها را ساده‌تر و جذاب‌تر می‌کند. Plotly نیز با ارائه نمودارهای تعاملی، امکان درک عمیق‌تر داده‌ها و ارائه مؤثرتر آن‌ها را فراهم می‌سازد.

     برای گام برداشتن در این مسیر جذاب و کسب مهارت‌های کلیدی در دنیای برنامه‌نویسی و تحلیل داده، شما را به شرکت در دوره‌های جامع آموزش پایتون در سایت کوئرا دعوت می‌کنیم. با فراگیری پایتون، دریچه‌های جدیدی به سوی فرصت‌های شغلی و پروژه‌های نوآورانه برای شما گشوده خواهد شد.

    سوالات متداولی که شما می‌پرسید

    1. چگونه به رسم نمودار در پایتون بپردازیم؟

    رسم نمودار در پایتون با کمک گرفتن از دو کتابخانه Matplotlib و Seaborn انجام می‌شود.

    2. چند نوع نمودار در پایتون داریم؟

    انواع نمودار در پایتون عبارتند از نمودار خطی، میله‌ای، هیستوگرام، پراکندگی و غیره که بسته به نیاز و هدف برنامه‌نویسی، هرکدام مزایا و معایب منحصربه‌فرد خود را دارند.

    3. کدام کتابخانه پایتون برای رسم نمودار بهتر است؟ Matplotlib یا Seaborn؟

    تطبیق‌پذیری و سفارشی‌سازی از مهم‌ترین ویژگی‌های کتابخانه Matplotlib هستند؛ درحالی‌که تم‌های داخلی برای استایل‌دهی به گرافیک‌های ترسیم‌شده با Matplotlib و برازش و تجسم مدل‌های رگرسیون خطی از بارزترین ویژگی‌های کتابخانه Seaborn هستند. 

    آموزش برنامه نویسی با کوئرا کالج
    k.bahrami

    کامل بهرامی دانش‌آموخته کارشناسی ارشد رشته مهندسی کامپیوتر گرایش نرم‌افزار از دانشگاه ارومیه است. به حوزه کامپیوتر، برنامه‌نویسی و فناوری اطلاعات علاقه‌مند‌ بوده و در حوزه‌های مذکور در مجله کوئرا محتوا تولید می‌کند.

    اشتراک در
    اطلاع از
    guest


    0 دیدگاه‌
    قدیمی‌ترین
    تازه‌ترین بیشترین واکنش
    بازخورد (Feedback) های اینلاین
    View all comments