कोर्स
Plotly सिर्फ खूबसूरत विज़ुअलाइज़ेशन बनाने के बारे में नहीं है; यह आपके डेटा की पूरी क्षमता को खोलने और उन अंतर्दृष्टियों को उजागर करने के बारे में है जो अन्यथा छिपी रह जातीं। यह संख्याओं की भाषा और कहानियों की भाषा के बीच सेतु है, जो व्यक्तियों और संगठनों को सूचित निर्णय लेने और सार्थक बदलाव लाने के लिए सक्षम बनाता है।
Plotly के बारे में ChatGPT इसी भाषा में बात करता है। साफ है, Plotly डेटा विज़ुअलाइज़ेशन की बेहतरीन लाइब्रेरीज़ में से एक है।

यह नीचे दिए गए जैसे अत्यधिक इंटरएक्टिव और देखने में आकर्षक चार्ट बनाता है:
आज, आप Plotly के साथ शानदार विज़ुअल बनाने की बुनियादी बातें सीखेंगे।
Plotly Express की बुनियाद
अन्य ट्यूटोरियल्स की तरह, हम लाइब्रेरी को pip (या अगर आप चाहें तो conda) से इंस्टॉल करके शुरू करेंगे।
$ pip install --upgrade plotly
$ conda install -c conda-forge plotly
Plotly को नियमित अपडेट मिलते रहते हैं, इसलिए अगर आपके पास पहले से लाइब्रेरी इंस्टॉल है तो --upgrade टैग जोड़ना सुनिश्चित करें।
यह ट्यूटोरियल Plotly की Express API पर केंद्रित है, जिसे 2019 में पेश किया गया था और जो कोर Plotly लाइब्रेरी के पुराने तरीकों की तुलना में कई फायदे देती है:
- सरल सिंटैक्स (लगभग अंग्रेज़ी जैसी पठनीय)
- विज़ुअलाइज़ेशन की विस्तृत रेंज (या अपने खुद के बनाने के टूल)
- एक्सिस और रंगों का स्वतः स्केलिंग
- pandas के साथ एकीकरण (आप Pandas की
.plotफ़ंक्शन के लिए Plotly प्लॉटिंग बैकएंड का उपयोग कर सकते हैं)
यह रहा Plotly Express में एक बेसिक प्लॉट का ढांचा:
import plotly.express as px
fig = px.plotting_function(
dataframe,
x='column-for-xaxis',
y='column-for-yaxis',
title='Title For the Plot',
width=width_in_pixels,
height=height_in_pixels
)
fig.show()
अलग-अलग प्लॉट अपने-अपने नामों के अंतर्गत होते हैं, जैसे histogram या scatter, जो express मॉड्यूल (उपनाम px) में होते हैं। किसी भी प्लॉटिंग फ़ंक्शन का पहला आर्गुमेंट डेटाफ़्रेम होता है और X तथा Y अक्षों पर प्लॉट होने वाले कॉलमों के नाम।
श्रेष्ठ अभ्यास यह है कि आप अपने प्लॉट्स को जानकारीपूर्ण title दें, ताकि पाठकों को पता रहे कि प्लॉट किस बारे में है।
जब कोई प्लॉटिंग फ़ंक्शन चलता है, तो यह एक Figure ऑब्जेक्ट लौटाता है, जिस पर आप show मेथड कॉल करके अपने नोटबुक में प्लॉट प्रदर्शित करते हैं।
प्लॉट बनाना शुरू करने के लिए हमें एक डेटासेट चाहिए। इस ट्यूटोरियल के लिए, हम Diamonds डेटासेट का उपयोग कर रहे हैं। इसमें संख्यात्मक और श्रेणीबद्ध फीचर्स का अच्छा संयोजन है — इस लेख के उद्देश्यों के लिए एकदम उपयुक्त।
import pandas as pd
diamonds = pd.read_csv("data/diamonds.csv")
diamonds.head()

डेटासेट में 53k से अधिक हीरे हैं, जिनके 10 भौतिक गुण हैं। आप नीचे डेटा के बुनियादी आँकड़ों का अन्वेषण कर सकते हैं।
diamonds.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 53940 entries, 0 to 53939
Data columns (total 10 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 carat 53940 non-null float64
1 cut 53940 non-null object
2 color 53940 non-null object
3 clarity 53940 non-null object
4 depth 53940 non-null float64
5 table 53940 non-null float64
6 price 53940 non-null int64
7 x 53940 non-null float64
8 y 53940 non-null float64
9 z 53940 non-null float64
dtypes: float64(6), int64(1), object(3)
memory usage: 4.1+ MB
diamonds.describe()
Exploratory Data Analysis (EDA) करते समय सबसे पहले जो काम किए जाते हैं, उनमें से एक है व्यक्तिगत वितरणों का अन्वेषण।
Plotly इस काम के लिए कई चार्ट देता है: हिस्टोग्राम, बॉक्सप्लॉट, वायलिन प्लॉट, बार चार्ट, आदि। आइए इनमें से कुछ देखें।
Plotly Express में हिस्टोग्राम
हिस्टोग्राम शायद वह पहला विज़ुअल है जो लोग सीखते हैं।
यह वितरण के मानों को क्रमबद्ध कर उन्हें बिन्स में डालता है। फिर, बार्स के जरिए दिखाया जाता है कि प्रत्येक बिन में कितने मान आते हैं:
import plotly.express as px
fig = px.histogram(
diamonds,
x="price",
title="Histogram of diamond prices",
width=600,
height=400,
)
fig.show()

अगर आप किसी भी बार पर होवर करते हैं, तो उसके संबंधित बिन की रेंज देख सकते हैं। Plotly स्वतः बिन्स की संख्या तय करता है, लेकिन यदि आप खुद सेट करना चाहें, तो nbins पैरामीटर का उपयोग कर सकते हैं।
हालाँकि, प्रत्येक वितरण के लिए बिन्स की बिल्कुल सही संख्या पाना कठिन है। इस कारण, आप प्रचलित उपाय अपना सकते हैं — बिन्स की संख्या वितरण की लंबाई के वर्गमूल के बराबर रखना:
# सही बिन्स की संख्या खोजें
nbins = int(len(diamonds) ** (1 / 2))
fig = px.histogram(
diamonds,
x="price",
title="Histogram of diamond prices",
nbins=nbins,
width=600,
height=400,
)
fig.show()
Plotly Express में बार चार्ट
हिस्टोग्राम संख्यात्मक फीचर्स का विश्लेषण करते हैं। श्रेणीबद्ध डेटा के विश्लेषण के लिए, हम बार चार्ट का सहारा लेते हैं। उदाहरण के लिए, श्रेणीबद्ध cut कॉलम को histogram फ़ंक्शन में पास करने पर हमें काउंटप्लॉट नामक बार चार्ट मिलता है। जी हाँ, आपने सही समझा — यह प्रत्येक श्रेणी में प्रेक्षणों की संख्या गिनता है।
fig = px.histogram(diamonds, x="cut")
fig.show()

पर रुके, हमने प्लॉट पर कोई लेबल नहीं लगाए! आइए इसे update_layout फ़ंक्शन से ठीक करें, जो फ़िगर बनने के बाद उसके कई पहलुओं को बदल सकता है।
fig.update_layout(
title="The number of diamonds in each diamond cut category",
xaxis_title="",
yaxis_title="Count",
)

आप पहले से जानते हैं कि title क्या करता है। xaxis_title और yaxis_title दोनों अक्षों के उन लेबलों को बदलते हैं जो Plotly द्वारा बनाए जाते हैं (जो सामान्यतः कॉलम के नाम होते हैं)।
अब, आइए हर डायमंड कट श्रेणी के लिए औसत कीमत देखें। पहले, हम pandas का groupby उपयोग करते हैं:
mean_prices = (
diamonds.groupby("cut")["price"].mean().reset_index()
)
mean_prices

groupby ऑपरेशन के अंत में reset_index चेन करने से आउटपुट DataFrame में बदल जाता है — और Plotly को DataFrames बहुत पसंद हैं। तो, आइए इसे bar फ़ंक्शन में पास करें:
fig = px.bar(mean_prices, x="cut", y="price")
fig.update_layout(
title="Average diamond prices for each cut category",
xaxis_title="",
yaxis_title="Mean price ($)",
)
fig.show()

bar एक श्रेणीबद्ध और एक संख्यात्मक फीचर लेता है, और पास किए गए DataFrame की हर पंक्ति के लिए एक बार बनाता है। नतीजा है प्रत्येक डायमंड टाइप की कीमतों की आँखों पर आसान पड़ने वाली तुलना।
Plotly Express में बॉक्स प्लॉट
वितरणों के विश्लेषण के लिए एक और आम प्लॉट बॉक्सप्लॉट है, जिसे Plotly Express में box से बनाया जाता है:
fig = px.box(diamonds, x="clarity", y="carat")
fig.update_layout(
title="Distribution of diamond carats for each clarity category",
xaxis_title="Clarity",
yaxis_title="Carat",
)
fig.show()

औसत डायमंड कैरेट ही दिखाने वाले बार्स बनाने के बजाय, बॉक्सप्लॉट कई सांख्यिकी दिखाता है:

आप देख सकते हैं:
- न्यूनतम/अधिकतम
- माध्यिका (मेडियन)
- 25वां परसेंटाइल
- 75वां परसेंटाइल
- और आउटलायर्स
प्रत्येक डायमंड क्लैरिटी श्रेणी के लिए।
Plotly Express में वायलिन प्लॉट
वितरणों का अन्वेषण करने के लिए एक और रोचक चार्ट वायलिन प्लॉट है। वायलिन प्लॉट मूलतः बॉक्सप्लॉट होते हैं, जिनमें कुछ अतिरिक्त सज्जा होती है:
fig = px.violin(diamonds, x="cut", y="price")
fig.show()

बॉक्स दिखाने के बजाय, यह एक स्मूथ कर्व दिखाता है जो किसी फीचर की डेंसिटी को दर्शाता है। इसके अंदर बॉक्सप्लॉट भी दिखाने के लिए आप box एट्रिब्यूट को True सेट कर सकते हैं:
fig = px.violin(diamonds, x="cut", y="price", box=True)
fig.show()

जहाँ बॉक्सप्लॉट केवल सार-सांख्यिकी दिखाते हैं, वहीं वायलिन प्लॉट वितरण के आकार को भी दिखाते हैं।
Plotly Express पर फीचर्स के बीच संबंधों का विज़ुअलाइज़ेशन
जो फीचर्स आपस में क़रीबी रूप से संबंधित हों, उन्हें साथ प्लॉट करने पर नए पैटर्न और अंतर्दृष्टियाँ दिखने लगती हैं। उदाहरण के लिए, अगर हम मानें कि डायमंड का कैरेट (वजन) उसकी कीमत तय करने वाला मुख्य कारक है, तो आइए उस संबंध का अन्वेषण करें।
Plotly Express में स्कैटरप्लॉट
हम स्कैटरप्लॉट (px.scatter) का उपयोग कर सकते हैं जो डेटासेट के सभी डायमंड्स को डॉट्स के रूप में प्लॉट करता है। डॉट्स की स्थिति उनके संबंधित प्राइस और कैरेट मानों से तय होती है:
fig = px.scatter(diamonds, x="price", y="carat")
fig.update_layout(
title="Price vs. Carat",
xaxis_title="Price ($)",
yaxis_title="Carat",
)
fig.show()

हम overplotting की समस्या में फँस गए हैं, जो तब होती है जब एक ही प्लॉट में दिखाने के लिए डेटा बहुत ज्यादा हो। डेटा में मौजूद असली पैटर्न और रुझानों को दिखाने के बजाय, ओवरप्लॉटिंग उन्हें ढक देती है।
हम इसे डेटासेट का लगभग ~10% ही प्लॉट करके ठीक कर सकते हैं, जो किसी भी मौजूदा पैटर्न को उजागर करने के लिए पर्याप्त होगा:
fig = px.scatter(
diamonds.sample(5000), x="price", y="carat"
)
fig.update_layout(
title="Price vs. Carat",
xaxis_title="Price ($)",
yaxis_title="Carat",
)
fig.show()

scatter कॉल में, हम केवल 5000 पंक्तियाँ (.sample(5000)) पास कर रहे हैं, जिससे प्राइस-केरेट संबंध में हल्का ऊपर की ओर रुझान दिखता है।
Plotly Express में हीटमैप
हीटमैप जटिल डेटासेट्स को विज़ुअलाइज़ करने के लिए बेहतरीन हैं, जैसे बड़े मैट्रिक्स जिनमें कोशिकाओं में संख्याओं की भीड़ से पैटर्न देखना कठिन होता है।
हीटमैप किसी मैट्रिक्स की प्रत्येक कोशिका के परिमाण के आधार पर रंग आवंटित करता है। एक परिदृश्य जहाँ यह उपयोगी हो सकता है, वह है किसी डेटासेट के करेलशन मैट्रिक्स को देखना।
करेलशन संख्यात्मक फीचर्स के बीच रैखिक संबंध को मापता है। इसलिए, करेलशन मैट्रिक्स की हर कोशिका फीचर्स की एक जोड़ी के बीच करेलशन को दर्शाती है।
आप किसी भी डेटासेट का करेलशन मैट्रिक्स pandas की corr मेथड से निकाल सकते हैं, जो एक DataFrame लौटाता है। यदि आप इसे Express के imshow फ़ंक्शन में पास करें, तो आपको एक हीटमैप मिलता है:
import plotly.express as px
# Create heatmap using Plotly Express
fig = px.imshow(
diamonds.corr(),
color_continuous_scale="Inferno_r",
)
# Show plot
fig.show()

करेलशन -1 से 1 तक होता है। रेंज की सीमाओं के नज़दीक के मान फीचर्स के बीच मज़बूत सकारात्मक या नकारात्मक रैखिक संबंध को दर्शाते हैं।
हम color_continuous_scale पैरामीटर के लिए रिवर्स Inferno कलरमैप चुन रहे हैं। आप Plotly दस्तावेज़ के कलर स्केल पेज से अन्य कलरमैप चुन सकते हैं।
Plotly Express में प्लॉट्स को कस्टमाइज़ करना
Plotly Express API की सबसे बड़ी खूबियों में से एक है प्लॉट्स को आसानी से कस्टमाइज़ करना।
update_layout फ़ंक्शन में बहुत से पैरामीटर होते हैं, जिनसे आप अपने चार्ट्स के लगभग हर पहलू को बदल सकते हैं।
आपके प्लॉट्स जहाँ भी प्रदर्शित होंगे, वहाँ की दर्शक-समुदाय, स्थल या माध्यम के अनुसार उन्हें प्रस्तुत करने योग्य बनाना आपकी ज़िम्मेदारी है।
सबसे पहले जिन चीज़ों का चुनाव करना होता है, उनमें से एक है प्लॉट थीम। Plotly में थीम्स डिफ़ॉल्ट चार्ट कॉन्फ़िगरेशन होते हैं जो लगभग सभी घटकों को नियंत्रित करते हैं।
आप किसी भी प्लॉटिंग फ़ंक्शन के template पैरामीटर से इसे बदल सकते हैं:
sample = diamonds.sample(3000)
fig = px.scatter(
sample, x="price", y="carat", template="ggplot2"
)
fig.show()

कुछ लोकप्रिय थीम्स हैं ggplot2, seaborn, plotly_dark, और presentation। आप plotly.io.templates कॉल करके पूरी सूची देख सकते हैं।
रंग
अब तक हमारे स्कैटरप्लॉट द्वि-आयामी रहे हैं। लेकिन हम इसमें रंगों के माध्यम से अतिरिक्त जानकारी जोड़ सकते हैं।
उदाहरण के लिए, हम प्लॉट में हर डॉट को डायमंड की श्रेणी के आधार पर रंग सकते हैं। ऐसा करने के लिए, आपको बस cut को color पैरामीटर में पास करना है:
sample = diamonds.sample(3000)
fig = px.scatter(sample, x="price", y="carat", color="cut")
fig.show()

cut पैरामीटर प्लॉट पर एक लीजेंड भी जोड़ देता है, जो श्रेणियों के रंग दिखाता है।
मार्कर आकार
एक और तरीका यह है कि हम डॉट्स के आकार के माध्यम से किसी संख्यात्मक फीचर को दर्शाएँ।
size पैरामीटर को carat पर सेट करने से हमें डायमंड कैरेट के आधार पर अलग-अलग आकार के डॉट्स मिलते हैं:
fig = px.scatter(sample, x="price", y="x", size="carat")
fig.show()

क्यों न हम रंग और आकार—दोनों का उपयोग करें? बिलकुल!
fig = px.scatter(
sample, x="price", y="x", size="carat", color="cut"
)
fig.show()

लेकिन यह प्लॉट बहुत जानकारी समेटे हुए है, जिसे नंगी आँख से समझना कठिन है, इसलिए बहुत सूचनात्मक नहीं है। अच्छा अभ्यास यह है कि एक ही प्लॉट में तीन से अधिक फीचर्स न ठूँसे जाएँ।
निष्कर्ष
अंत तक पहुँचने पर बधाई! आपने इस ट्यूटोरियल में इतना सीख लिया है कि अब आप हमारी अन्य सामग्रियों से Plotly को स्वयं सीखना जारी रख सकते हैं:
- Introduction to data visualization with Plotly in Python कोर्स
- Data Visualization with Plotly in R ट्यूटोरियल
- Creating histograms in Plotly ट्यूटोरियल
आप Plotly के Graph Objects API के बारे में भी सीख सकते हैं — अधिक कस्टमाइज़ेशन विकल्पों, इंटरएक्टिविटी और एनीमेशन पर पूर्ण नियंत्रण, तथा उन्नत विज़ुअलाइज़ेशन प्रकारों के समर्थन के लिए।