Difference between revisions of "Fancy Plots using Plotly"

m (Syntax test)
(Line plots added)
Line 6: Line 6:
  
 
==Installation==
 
==Installation==
We need the [https://pypi.org/project/plotly-express/ plotly-express] library.
+
We need the [https://pypi.org/project/plotly-express/ plotly-express] and [https://pypi.org/project/kaleido/ kaleido] library.
  
 
====Conda====
 
====Conda====
 
<syntaxhighlight lang="shell">
 
<syntaxhighlight lang="shell">
 
conda install -c plotly plotly_express==0.4.0
 
conda install -c plotly plotly_express==0.4.0
</syntaxhighlight><br />
+
conda install -c conda-forge python-kaleido
conda install -c plotly plotly_express==0.4.0
+
</syntaxhighlight>
  
 
====Pip====
 
====Pip====
pip install plotly_express==0.4.0
+
<syntaxhighlight lang="shell">
 +
pip install plotly_express==0.4.0
 +
pip install kaleido
 +
</syntaxhighlight>
  
 
==Line Plots==
 
==Line Plots==
<syntaxhighlight lang="python3">
+
CSV Data:<syntaxhighlight lang="python">
# x and y given as array_like objects
+
animal,age,cuteness
 +
cat,1,5
 +
cat,2,8
 +
cat,3,12
 +
cat,4,15
 +
cat,5,14
 +
cat,6,15
 +
cat,7,16
 +
cat,8,18
 +
cat,9,17
 +
cat,10,10
 +
dog,1,12
 +
dog,2,14
 +
dog,3,18
 +
dog,4,20
 +
dog,5,19
 +
dog,6,17
 +
dog,7,14
 +
dog,8,9
 +
dog,9,8
 +
dog,10,6
 +
</syntaxhighlight>Code:<syntaxhighlight lang="python">
 
import plotly.express as px
 
import plotly.express as px
fig = px.scatter(x=[0, 1, 2, 3, 4], y=[0, 1, 4, 9, 16])
+
import pandas as pd
 +
from tqdm import tqdm
 +
 
 +
PLOTS_DIR = "./plots"
 +
PLOT_NAME = "cat_v_dog"
 +
PLOT_TYPES = ["svg", "png", "html", "pdf", "jpeg"]
 +
FIG_DIR = PLOTS_DIR + "/" + PLOT_NAME
 +
!mkdir -p $FIG_DIR
 +
 
 +
# Plot Size
 +
PLOT_WIDTH = 800
 +
PLOT_HEIGHT = 300
 +
 
 +
 
 +
df = pd.read_csv('./data/sample.csv')
 +
fig = px.line(df, x="age", y="cuteness", color="animal")
 +
fig.update_layout(
 +
    title="Cat vs Dog Cuteness",
 +
    xaxis_title="Animal's Age",
 +
    yaxis_title="Cuteness Rating",
 +
    legend_title="Animal",
 +
    font=dict(
 +
        family="Courier New, monospace",
 +
        size=14,
 +
        color="RebeccaPurple"
 +
    )
 +
)
 +
 
 +
fig.update_layout(
 +
    autosize=True,
 +
    width=PLOT_WIDTH,
 +
    height=PLOT_HEIGHT,
 +
    margin=dict(
 +
        l=50,
 +
        r=50,
 +
        b=50,
 +
        t=50,
 +
        pad=4
 +
    ),
 +
    legend=dict(
 +
        yanchor="top",
 +
        y=0.999,
 +
        xanchor="left",
 +
        x=0.001)
 +
)
 +
 
 
fig.show()
 
fig.show()
</syntaxhighlight>
+
# Save Plot
<br /><syntaxhighlight lang="python3">
+
for i in tqdm(range(len(PLOT_TYPES))):
import plotly.express as px
+
    if PLOT_TYPES[i] == "html":
fig = px.scatter(x=[0, 1, 2, 3, 4], y=[0, 1, 4, 9, 16])
+
        fig.write_html(FIG_DIR + "/" + PLOT_NAME + "." + PLOT_TYPES[i])
fig.show()
+
    else:
</syntaxhighlight><br /><syntaxhighlight lang="python">
+
        fig.write_image(FIG_DIR + "/" + PLOT_NAME + "." + PLOT_TYPES[i], scale=5)
# x and y given as array_like objects
+
</syntaxhighlight>Output:
import plotly.express as px
+
 
fig = px.scatter(x=[0, 1, 2, 3, 4], y=[0, 1, 4, 9, 16])
+
[[File:Cat vs dog cuteness.png|frameless|733x733px]]
fig.show()
 
</syntaxhighlight><br />
 
  
 
==Scatter Plots==
 
==Scatter Plots==
 +
<br />
 +
 +
== Bar Plots ==
 +
<br />
 +
 +
== Radar Plots ==
 +
<br />
 +
 +
== Bubble Charts ==
 +
<br />
 +
 +
== Box Plots ==
 +
<br />
 +
 +
== 2D Histograms ==
 +
<br />

Revision as of 11:48, 18 February 2022


  • This is a collection of simple plots using the plotly library.
  • It consists of elegant color schemes and easy to ready adjustable fonts.
  • The reason for using plotly is that it allows for HTML plots that can be scaled and zoomed after plotting.

Installation

We need the plotly-express and kaleido library.

Conda

conda install -c plotly plotly_express==0.4.0
conda install -c conda-forge python-kaleido

Pip

pip install plotly_express==0.4.0
pip install kaleido

Line Plots

CSV Data:

animal,age,cuteness
cat,1,5
cat,2,8
cat,3,12
cat,4,15
cat,5,14
cat,6,15
cat,7,16
cat,8,18
cat,9,17
cat,10,10
dog,1,12
dog,2,14
dog,3,18
dog,4,20
dog,5,19
dog,6,17
dog,7,14
dog,8,9
dog,9,8
dog,10,6

Code:

import plotly.express as px

import pandas as pd from tqdm import tqdm

PLOTS_DIR = "./plots" PLOT_NAME = "cat_v_dog" PLOT_TYPES = ["svg", "png", "html", "pdf", "jpeg"] FIG_DIR = PLOTS_DIR + "/" + PLOT_NAME !mkdir -p $FIG_DIR

  1. Plot Size

PLOT_WIDTH = 800 PLOT_HEIGHT = 300


df = pd.read_csv('./data/sample.csv') fig = px.line(df, x="age", y="cuteness", color="animal") fig.update_layout(

   title="Cat vs Dog Cuteness",
   xaxis_title="Animal's Age",
   yaxis_title="Cuteness Rating",
   legend_title="Animal",
   font=dict(
       family="Courier New, monospace",
       size=14,
       color="RebeccaPurple"
   )

)

fig.update_layout(

   autosize=True,
   width=PLOT_WIDTH,
   height=PLOT_HEIGHT,
   margin=dict(
       l=50,
       r=50,
       b=50,
       t=50,
       pad=4
   ),
   legend=dict(
       yanchor="top",
       y=0.999,
       xanchor="left",
       x=0.001)

)

fig.show()

  1. Save Plot

for i in tqdm(range(len(PLOT_TYPES))):

   if PLOT_TYPES[i] == "html":
       fig.write_html(FIG_DIR + "/" + PLOT_NAME + "." + PLOT_TYPES[i])
   else:
fig.write_image(FIG_DIR + "/" + PLOT_NAME + "." + PLOT_TYPES[i], scale=5)

Output:

Cat vs dog cuteness.png

Scatter Plots


Bar Plots


Radar Plots


Bubble Charts


Box Plots


2D Histograms