Jmis 26 4 167

Download as pdf or txt
Download as pdf or txt
You are on page 1of 9

REVIEW ARTICLE

pISSN 2234-778X • eISSN 2234-5248


J Minim Invasive Surg 2023;26(4):167-175

Mastering data visualization with Python: practical tips


for researchers

Soyul Han, Il-Youp Kwak


Department of Applied Statistics, Chung-Ang University, Seoul, Korea

Big data have revolutionized the way data are processed and used across all fields. In the Received August 21, 2023
Revised October 17, 2023
past, research was primarily conducted with a focus on hypothesis confirmation using sample Accepted November 10, 2023
data. However, in the era of big data, this has shifted to gaining insights from the collected
data. Visualizing vast amounts of data to derive insights is crucial. For instance, leveraging big Corresponding author
Il-Youp Kwak
data for visualization can help identify and predict characteristics and patterns related to Department of Applied Statistics,
various infectious diseases. When data are presented in a visual format, patterns within the Chung-Ang University, 84 Heukseok-
data become clear, making it easier to comprehend and provide deeper insights. This study ro, Dongjak-gu, Seoul 06974, Korea
E-mail: [email protected]
aimed to comprehensively discuss data visualization and the various techniques used in the https://orcid.org/0000-0002-7117-7669
process. It also sought to enable researchers to directly use Python programs for data
visualization. By providing practical visualization exercises on GitHub, this study aimed to © 2023 The Korean Society of Endo-
facilitate their application in research endeavors. Laparoscopic & Robotic Surgery
This is an Open Access article distributed
under the terms of the Creative Commons
Attribution Non-Commercial License
Keywords: Big data, Data visualization, Matplotlib, Seaborn, Python (http:// creativecommons.org/licenses/
by-nc/4.0/) which permits unrestricted
non-commercial use, distribution, and
reproduction in any medium, provided
the original work is properly cited.

INTRODUCTION tering and pattern discovery, evaluation of modeling results, and


presenting findings [1]. Owing to these benefits, effective visu-
This article will cover the following topics: (1) why data visualiza- alization aids researchers in understanding their data and con-
tion is important; (2) data visualization libraries in Python; and (3) veying insights [2]. Additionally, graphics stimulate researchers
method of drawing graphs using data visualization libraries. to propose questions and ideas. However, interpreting graphics
requires experience, and to prevent overinterpretation, statisti-
WHY IS DATA VISUALIZATION cal knowledge is necessary [1].
IMPORTANT?
Data exploration
What is data visualization? Through data visualization, complex datasets can be under-
Data visualization refers to the graphical representation of ‘raw’ stood more easily. Valuable insights that are difficult to grasp
data and simple summary information. It is also useful for data from raw data alone can be obtained. Visual representation
cleaning, exploration of data structures, outlier detection, clus- facilitates the identification of patterns and correlations more ef-

Journal of Minimally Invasive Surgery Vol. 26. No. 4, 2023 https://doi.org/10.7602/jmis.2023.26.4.167


Han and Kwak

fortlessly. graphics. Seaborn provides simpler syntax and more appealing


designs than Matplotlib. It automatically maps data values to vi-
Identifying trends and anomalies sual attributes like color, size, and style, and internally computes
Data visualization aids in grasping trends, outliers, extreme statistical transformations [6].
values, and more. It is useful in identifying sudden increases or
decreases in the data, possible performance improvements, METHOD OF DRAWING GRAPHS USING
and factors influencing specific outcomes. DATA VISUALIZATION LIBRARIES

Effective communication In this study, we aimed to explain how to implement data visu-
Visualization is a powerful tool for conveying data to others. It alization using Python’s Matplotlib and Seaborn libraries. Practi-
allows complex concepts and results to be presented in a visu- cal code and data can be downloaded from GitHub for learning
al and intuitive manner, enabling smooth communication. Data purposes (https://github.com/soyul5458/Python_data_visual-
visualization promotes communication and collaboration among ization). The practical exercises were conducted using Google
experts from various fields, facilitating informed decision-making Colab, which is free and can be accessed anytime, anywhere
based on information. with a Gmail account, without the need to download any sepa-
In summary, data visualization is an essential tool for obtain- rate program.
ing meaningful insights from data, ultimately leading to better
outcomes. Matplotlib

DATA VISUALIZATION LIBRARIES IN Basic visualization


PYTHON Using Matplotlib, various types of graphs can be easily drawn.
The “pyplot” module is a sub-module of Matplotlib that provides
Data visualization tools and techniques are essential for ana- a simple and user-friendly interface for generating different
lyzing vast amounts of information and making data-driven types of graphs, such as line plots, bar plots, histograms, and
decisions. Although there are several programming languages scatter plots. To use it conveniently, we import it with the alias
available for this purpose, the present study focuses only on “plt.”
data visualization libraries commonly used in Python. This pro- Generally, the visualization process in Fig. 1 consists of three
gramming language provides rich libraries for data visualization, steps: (1) step 1: import the visualization library; (2) step 2: de-
and we describe the Matplotlib and Seaborn libraries in this cide which data to display on the x and y axes; and (3) step 3:
study. Using these libraries, we can generate various charts enter the graph output function.
such as bar charts, histograms, and scatter plots.
# Step 1. Importing the
Matplotlib library
Matplotlib import matplotlib.pyplot as plt
Matplotlib [3] is a graphic library for data visualization that has # Step 2. Generating arbitrary x,
y data
been well-established, undergoing almost 20 years of con- x = [1, 2, 3]
y = [1, 5, 10]
tinuous development. It is the most popular data visualization
# Step 3. Displaying the graph
library in Python and is used by scientists and researchers plt.plot(x, y);
worldwide [4]. Matplotlib is a comprehensive package with all
the modules and libraries included, and it offers great flexibility Fig. 1. Line graph representation using Matplotlib.
to precisely control the arrangement and visual appearance of
objects within plots. Specifying options for creating figures
When creating graphs for data visualization, there are several
Seaborn options that can be used to effectively present the figures. For
Seaborn is a Python data visualization library based on Mat- example, adding graph titles, x- and y-axis names, legends,
plotlib and closely integrated with numpy and pandas data and other options can help the reader to better understand the
structures [5]. It is a specialized interface for creating statistical figures.

168 https://doi.org/10.7602/jmis.2023.26.4.167
Mastering data visualization with Python: practical tips for researchers

1) Title (Fig. 2) Table 1. Line styles in Matplotlib


# Drawing the graph.
import numpy as np
Character Description

x = [1, 2, 3] - solid
y = [21, 25, 33]
-- dashed
plt.plot(x, y)
-. dash-dot
# Setting the graph title.
plt.title("Line graph");
: dotted
Fig. 2. Setting the graph title.

# Setting the four styles


2) Axis labels (Fig. 3) x1 = np.array(x)
x2 = x1 + 2
x3 = x1 + 5
x4 = x1 + 10

# Setting names for the x and y plt.plot(x1, y, linestyle="-",


axes. label="x1")
plt.xlabel("X-Axis") plt.plot(x2, y, linestyle="--",
plt.ylabel("Y-Axis"); label="x2")
plt.plot(x3, y, linestyle="-.",
label="x3")
plt.plot(x4, y, linestyle=":",
label="x4")
Fig. 3. Setting names for the x and y axes. plt.legend();

Fig. 6. The line graph displays four different line styles.


3) Legend (Fig. 4)
The plt.legend() function is used to add a legend, and the 6) Marker (Fig. 7)
label of the added legend is displayed with the name set in the If you want to represent points, add the marker argument.
label argument of the plot() function. The position of the legend The shape of the marker can be changed in various ways, and
can be set using the loc argument. the types can be found in matplotlib.markers (https://matplotlib.
org/stable/api/markers_api.html). The size of the marker can
# Adding a legend. also be set as desired.
plt.plot(x, y, label="Mean
temperature (\u2103)")
plt.legend(loc="lower right");

# Setting the square marker


Fig. 4. Adding a legend. plt.plot(x, y, marker="s");

# Adjusting the marker size


plt.plot(x, y, marker="o",
4) Line width (Fig. 5) linestyle=":", markersize=13);

# Adding a legend.
plt.plot(x, y, label="Mean
temperature (\u2103)")
plt.legend(loc="lower right");
Fig. 7. Setting the marker.

Fig. 5. Setting the line width. 7) Color (Fig. 8)


Graph color is added to the plot function using the color ar-
5) Line style (Fig. 6) gument. It is possible to change to default colors using color
Four different styles listed in Table 1 can be used. Using the abbreviations, and various colors can be selected from the
linestyle argument, different line styles can be displayed as Matplotlib gallery. Not only the line color but also the color of the
shown in Fig. 6. marker and its edge can be changed.
In addition to the above, practical codes for resizing the
graph, setting dpi, background color, axis ranges, axis ticks,
grid, and saving the graph can be found in the matplotlib.ipynb

https://doi.org/10.7602/jmis.2023.26.4.167 169
Han and Kwak

file on GitHub. (3) Displaying different bar colors (Fig. 12)


Bars can be displayed in different colors based on categori-
# Keywords
plt.plot(x, y, color="red"); cal variables, as demonstrated in the following example, where
# Abbreviations we will perform a practical code exercise to show colors cor-
plt.plot(x, y, color="r");
responding to major categories.

Fig. 8. Setting color.


# Step 1. Creating Data for
Practice
Basic plotting with Matplotlib df1 = pd.DataFrame({'Year': year,
'Students' :n_std, 'Major' :
1) Line plot (Fig. 9) ['A','B','C','C','B','A','A']})

Line graphs are frequently used to represent trends over # Step 2. Extracting Data by
Major
time. sub1 = df1.loc[df1["Major"]=='A']
sub2 = df1.loc[df1["Major"]=='B']
sub3 = df1.loc[df1["Major"]=='C']

# Data Preparation # Step 3. Displaying Different Bar


import seaborn as sns Colors Based on the Major
tips = sns.load_dataset("tips") plt.bar(sub1.Year, sub1.Students,
color = 'r', label="A")
# Data Confirm plt.bar(sub2.Year, sub2.Students,
tips.head() color = 'b', label="B")
plt.bar(sub3.Year, sub3.Students,
# Line plot color = 'y', label="C")
plt.plot(tips.total_bill); plt.legend(ncol=3, loc="upper
center");

Fig. 9. Line graph representation with Matplotlib.


Fig. 12. Displaying different bar colors based on categorical
2) Bar plot variables.
Bar graphs are used to represent group differences. Each
3) Box plot
bar’s length corresponds to the respective value. Both vertical
Box plots are exploratory graphs that represent data distribu-
and horizontal bar graphs can be created. Additionally, patterns
tions. They quickly show the range, median, and outliers of the
can be added to the bars and adjust their widths.
dataset.

(1) Vertical bar graph (Fig. 10)


(1) Drawing a single box plot (Fig. 13)

# Load data
# Generating data iris = sns.load_dataset("iris")
year = [2010, 2012, 2014, 2016, iris.head()
2018, 2020, 2022]
n_std = [40, 60,55, 75, 62, # Drawing a single box plot
46,80] plt.figure(figsize = (10, 5))
plt.boxplot(iris['sepal_length']);
# Drawing bar plot
plt.bar(year, n_std);

Fig. 13. Visualization of a single box plot with Matplotlib.

Fig. 10. Vertical bar graph representation with Matplotlib. (2) Drawing multiple box plots (Fig. 14)

# To draw multiple box plots like


(2) Horizontal bar graph (Fig. 11) this, you need to create a list
and pass it as an argument.
plt.figure(figsize = (10, 5))
# Horizontal Bar Graph : barh plt.boxplot([iris['sepal_
plt.barh(year, n_std, color = 'r') length'], iris['sepal_width'],
iris['petal_length'],
plt.ylabel("Year") iris['petal_width']]); # list
plt.xlabel("Student numbers")
plt.xlim(0, 100);
Fig. 14. Visualization of multiplt box plot with Matplotlib.

Fig. 11. Horizontal bar graph representation with Matplotlib. 4) Histogram


Histograms graphically represent frequency distribution

170 https://doi.org/10.7602/jmis.2023.26.4.167
Mastering data visualization with Python: practical tips for researchers

tables. The horizontal axis represents intervals, and the vertical cluded by inputting %.2f%% consecutively. A legend can also
axis represents frequencies. The hist() function can be used be added using the legend() function.
to create histograms that divide data values into equal inter-
vals called bins, and the size of bins affects the frequency and (1) Data preparation (Fig. 18)
shape of the histogram. import seaborn as sns
titanic = sns.load_
dataset("titanic")

(1) Basic histogram (Fig. 15) titanic.head()

total = titanic["sex"].value_
counts()
# Loading 'titanic' dataset from total
seaborn
import seaborn as sns
titanic = sns.load_ Fig. 18. Verification of data quantity.
dataset("titanic")

# Histogram
plt.hist(titanic.age);
(2) Drawing pie chart (Fig. 19)

Fig. 15. Visualization of histogram with Matplotlib.

# labels: adding labels


(2) Adjusting the graph using various options (Fig. 16) plt.pie(total,labels=total.
index);

# Adjusting the number of bins to


15
# Setting transparency, color,
and edgecolor
plt.hist(titanic.age, bins=15,
alpha=0.5, color="steelblue",
edgecolor="navy",
histtype="bar"); Fig. 19. Visualization of pie chart with Matplotlib.

(3) Displaying percentage (Fig. 20)


Fig. 16. Adjusting the histogram using various options.

5) Scatter plot (Fig. 17)


Scatter plots graphically represent the correlation between # Rounding the ratio to two
decimal places and displaying as
two variables on a coordinate plane using dots. Scatter plots a percentage.

can easily be drawn using the scatter() function. The markers plt.pie(total, labels=total.
index, autopct="%.2f%%");
can be changed to different shapes using the marker argument
described above.
# Data Preparation
import seaborn as sns
tips = sns.load_dataset("tips")
Fig. 20. Displaying percentages in a pie chart.
# Scatter plot
plt.scatter(tips.total_bill,
tips.tip)
plt.xlabel('Total bill') Seaborn
plt.ylabel('Tip');

Fig. 17. Visualization of scatter plot with Matplotlib. Figure-level vs. axes-level function
Seaborn functions can be broadly categorized into ‘figure-
6) Pie chart level’ and ‘axes-level’ functions. The three large boxes at the
Pie charts are used to visually display the overall proportions top in Fig. 21 (replot, displot, catplot) are figure-level functions,
of categorical data. They provide a convenient way to see the and the smaller boxes below are axes-level functions. Figure-
size and relative proportions of each section. The autopct argu- level functions create a Seaborn figure separately from Mat-
ment in the pie() function specifies the format of the numbers plotlib and perform plotting on that figure. Therefore, the layout
displayed inside the sectors. The value %.2f displays numbers can be changed using facetgrid (Seaborn’s figure). Axes-level
up to two decimal places. The percentage symbol can be in- functions, on the other hand, specify where to plot using the ax

https://doi.org/10.7602/jmis.2023.26.4.167 171
Han and Kwak

replot displot catplot


(relational) (distributions) (categorical)

scatterplot histplot stripplot

lineplot kdeplot swarmplot

ecdfplot boxplot

histplot violinplot

pointplot

barplot
Fig. 21. Seaborn library structure.

Table 2. Types of Seaborn graphs


No Type Name Figure-level function Axes-level function
1 Relational plot Scatter plot sns.relplot(kind=“scatter”) sns.scatterplot()
2 Line plot sns.relplot(kind=“line”) sns.lineplot()
3 Distribution plot Histogram plot sns.displot(kind=“hist”) sns.histplot()
4 Kernel density plot sns.displot(kind=“kde”) sns.kdeplot()
5 Cumulative distribution plot sns.displot(kind=“ecdf”) sns.ecdfplot()
6 Rug plot - sns.rugplot()
7 Distribution plot sns.distplot() -
8 Categorical scatter plot Strip plot sns.catplot(kind=“strip”) sns.stripplot()
9 Swarm plot sns.catplot(kind=“swarm”) sns.swarmplot()
10 Categorical distributiona plot Box plot sns.catplot(kind=“box”) sns.boxplot()
11 Violin plot sns.catplot(kind=“violin”) sns.violinplot()
12 Letter value plot sns.catplot(kind=“boxen”) sns.boxenplot()
13 Categorical estimate plots Point plot sns.catplot(kind=“point”) sns.pointplot()
14 Bar plot sns.catplot(kind=“bar”) sns.barplot()
15 Count plot sns.catplot(kind=“count”) sns.countplot()
16 Regression plot Regression line and scatter plot - sns.regplot()
17 Multiple regression plot sns.lmplot() -
18 Residual plot - sns.residplot()
19 Matrix plot Heatmap - sns.heatmap()
20 Dendrogram and Heatmap - sns.clustermap()
21 Multi-plot grids Grid settings sns.FacetGrid() -
22 Multivariable plot sns.pairplot() -
23 Multivariate grid settings sns.PairGrid() -
24 Bivariate plot sns.jointplot() -
25 Bivariate grid settings sns.JointGrid() -

172 https://doi.org/10.7602/jmis.2023.26.4.167
Mastering data visualization with Python: practical tips for researchers

Table 3. Visualization by variable type


Variable Analysis Recommended Visualization
Single Variable Categorical Frequency analysis, Cross-tabulation Countplot
Continuous Descriptive statistics Histogram
Two Variables Continuous/Continuous Correlation analysis Scatter plot
Categorical/Categorical Chi-square test Heatmap
Categorical/Continuous Multivariate analysis Violin plot
Strip plot
Swarm plot

parameter, and thus the layout can be changed using methods - s izes: Specifies the minimum and maximum size of the
such as plt.figure(). Table 2 summarizes the various graphs markers.
available in the Seaborn library.
(1) hue (Fig. 22)
Data type determines visualization
# Loading the 'tips' Sample Data
Table 3 summarizes the statistical analysis and visualization tips = sns.load_dataset("tips")

methods based on variable types. Understanding variable types # Using hue allows representing
different colors for each group.
is crucial during the visualization process because different sns.relplot(x="total_
bill", y="tip", data=tips,
graphic methods are used depending on the type. Visualization hue="smoker");
guides based on variables are well-documented on the Python
gallery page, so please refer to it (https://www.data-to-viz.com/). Fig. 22. Utilization of the hue option with Seaborn.

Basic plotting with Seaborn (2) style (Fig. 23)


1) Relational plot: scatter plot (Table 2, No. 1)
Scatter plots represent graphs using points on the x and y
axes. In other words, they show the relationship between two # Using style allows customizing
the appearance of each group.
different continuous variables using dots. Both codes below are sns.relplot(x="total_bill",
y="tip", data=tips, hue="smoker",
for outputting scatter plots. style="smoker");

· s ns.relplot(x, y, data, kind=“scatter”, hue, style, size, sizes)


· s ns.scatterplot(x, y, data, hue, style, size, sizes)
relplot is a higher-level function for scatter plots and line plots Fig. 23. Utilization of the style option with Seaborn.
(Fig. 21). Therefore, both scatter plots and line graphs can be
drawn using the replot() function. Note that the kind argument (3) size (Fig. 24)
of replot() defaults to “scatter.” The functions’ features are sum-
marized below, and the functionality of each argument can be
verified through practice code. When specifying hue, style, and # Adjusting the marker size
sns.relplot(x="total_bill",
size together, the complexity may increase, making it difficult to y="tip", data=tips, size="size");
understand the relationships between variables. Please be cau-
tious when using them.
-h  ue: Specifies the column to distinguish features (distin-
guishes by color). Fig. 24. Utilization of the size option with Seaborn.

- s tyle: Specifies the column to distinguish features (distin-


guishes by marker shape).
- s ize: Specifies the variable that sets the size of markers,
applicable to both continuous and categorical variables.

https://doi.org/10.7602/jmis.2023.26.4.167 173
Han and Kwak

(4) sizes (Fig. 25) (3) Estimate with different colors by category (Fig. 28)
# Specifying the range for marker
size
# In such cases, normalize the # Estimate with different colors
data within that range before based on time.
plotting. sns.kdeplot(x="tip", data=tips,
sns.relplot(x="total_bill", hue="time");
y="tip", data=tips, size="size",
sizes=(15, 200));

Fig. 25. Utilization of the sizes option with Seaborn. Fig. 28. Displaying estimations in different colors by categorical
variables.
2) Distribution plot: kernel density plot (Table 2, No. 4)
Seaborn provides additional features compared to simple 3) Distribution plot: rug plot (Table 2, No. 6; Fig. 29)
histograms in Matplotlib, such as kernel density, rug display, A rug plot is used to describe the distribution of data by
and multidimensional composite distribution. Among them, the showing data positions as small vertical lines (rugs) on the x-
kernel density plot displays a smoother distribution curve than axis.
a histogram by overlapping kernels. Both codes below are for
outputting kernel density plots.
# Rug plot
· s ns.displot(kind=“kde”) sns.kdeplot(x="tip", data=tips)
sns.rugplot(x="tip", data=tips);
· s ns.kdeplot(x, y, data, bw_adjust, cumulative)
-b
 w_adjust: Adjusts the data interval for density estimation
(default = 1).
- cumulative:
 If True, estimates the cumulative distribution Fig. 29. Visualization of rug plot with Seaborn.
function.
For kernel density plots, by assigning variable values to the 4) Categorical scatter plot: strip plot (Table 2, No. 8; Fig. 30)
y axis instead of the x axis, the graph can also be drawn hori- A strip plot is a graph that represents all data points as dots,
zontally or overlapped. Additionally, multiple variables can be similar to a scatter plot.
overlaid on one graph. Please refer to the GitHub practice code
for details.
# Stip plot
sns.stripplot(x="day", y="tip",
(1) Kernel density plot (Fig. 26) data=tips);

# Drawing a kernel density


estimation plot
sns.kdeplot(x="tip", data=tips); Fig. 30. Visualization of strip plot with Seaborn.

5) Categorical scatter plot: swam plot (Table 2, No. 9; Fig. 31)


Fig. 26. Visualization of kernel density plot with Seaborn. A swarm plot is similar to a strip plot but arranges the dots
horizontally to avoid overlap of data points.
(2) Horizontal density plot (Fig. 27)

# Swarm plot
sns.swarmplot(x="day", y="tip",
# Drawing horizontally data=tips, s=3);
sns.kdeplot(y="tip", data=tips);

Fig. 27. Visualization of horizontal density plot with Seaborn. Fig. 31. Visualization of swarm plot with Seaborn.

174 https://doi.org/10.7602/jmis.2023.26.4.167
Mastering data visualization with Python: practical tips for researchers

6) Categorical distribution plot: box plot (Fig. 32) Notes


The Seaborn library’s box plot can be used with a strip plot
overlaid. Authors’ contributions
# Box plot Conceptualization, Data curation, Formal analysis, Investigation,
sns.boxplot(x="day", y="tip",
data=tips); Methodology, Visualization: SYH
Project administration: IYK
Writing–original draft: SYH
Writing–review & editing: SYH, IYK

# Adding a Jitter Plot


sns.boxplot(x="day", y="tip", Conflict of interest
data=tips)
sns.stripplot(x="day", All authors have no conflicts of interest to declare.
y="tip", data=tips, color="b",
marker="*");

Funding/support
None.

Data availability
Fig. 32. Visualization of box plot with Seaborn.
The data presented in this study are available at: https://github.
com/soyul5458/Python_data_visualization.
7) Categorical distribution plot: violin plot (Fig. 33)
A violin plot is a visualization of data distribution, resembling a
box plot combined with a kernel density plot. ORCID
Soyul Han, https://orcid.org/0000-0003-0156-250X
Il-Youp Kwak, https://orcid.org/0000-0002-7117-7669

REFERENCES
# Violin plot
sns.violinplot(x="day", y="tip",
data=tips);
1. Unwin A. Why is data visualization important? What is
important in data visualization? Harvard Data Sci Rev
2020;2:1-7.
2. Tukey JW. Exploratory data analysis. Addison-Wesley
Fig. 33. Visualization of violin plot with Seaborn.
Pub.; 1977.
3. Hunter JD. Matplotlib: a 2D graphics environment. Comput
CONCLUSIONS Sci Eng 2007;9:90-95.
4. Odegua R. DataSist: a Python-based library for easy
In conclusion, data visualization is essential. It presents com-
data analysis, visualization and modeling [Prepint].
plex concepts in an easy-to-understand manner, allowing for
arXiv:1911.03655; 2019. https://doi.org/10.48550/arX-
the identification of patterns and trends, gaining insights, and
iv.1911.03655
making better decisions more quickly. In the field of clinical re-
5. harkiran78. Top 10 libraries for data visualization in 2020
search, large amounts of data are being collected, and Python
[Internet]. GeeksforGeeks; 2020 [cited 2023 Oct 17]. Avail-
visualization tools are effective for visual representation. Using
able from: https://www.geeksforgeeks.org/top-10-libraries-
appropriate data visualization tools according to data types
for-data-visualization-in-2020/
can significantly improve the quality and impact of research,
6. Sial AH, Rashdi SYS, Khan AH. Comparative analysis
enabling readers to understand complex concepts easily.
of data visualization libraries matplotlib and seaborn in
Python. Int J Adv Trends Comput Sci Eng 2021;10:2770-
2281.

https://doi.org/10.7602/jmis.2023.26.4.167 175

You might also like