Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 21 additions & 4 deletions copulas/visualization.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@

import pandas as pd
import plotly.express as px
import plotly.figure_factory as ff
import plotly.graph_objects as go
import scipy


class PlotConfig:
Expand Down Expand Up @@ -30,9 +31,25 @@ def _generate_1d_plot(data, title, labels, colors):
Returns:
plotly.graph_objects._figure.Figure
"""
fig = ff.create_distplot(
hist_data=data, group_labels=labels, show_hist=False, show_rug=False, colors=colors
)
traces = []
for index, _data in enumerate(data):
start = min(_data)
end = max(_data)

curve_x = [start + x * (end - start) / 500 for x in range(500)]
curve_y = scipy.stats.gaussian_kde(_data)(curve_x)

traces.append(
go.Scatter(
x=curve_x,
y=curve_y,
mode='lines',
name=labels[index],
line={'color': colors[index]},
)
)

fig = go.Figure(data=traces)

for i, name in enumerate(labels):
fig.update_traces(
Expand Down
4 changes: 2 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@ dependencies = [
"pandas>=2.1.1,<3;python_version>='3.12' and python_version<'3.13'",
"pandas>=2.2.3,<3;python_version>='3.13' and python_version<'3.14'",
"pandas>=2.3.3,<3;python_version>='3.14'",
"plotly>=5.10.0,<7;python_version<'3.13'",
"plotly>=5.12.0,<7;python_version>='3.13'",
"plotly>=5.10.0;python_version<'3.13'",
"plotly>=5.12.0;python_version>='3.13'",
"scipy>=1.9.2;python_version<'3.12'",
"scipy>=1.12.0;python_version>='3.12' and python_version<'3.13'",
"scipy>=1.14.1;python_version>='3.13' and python_version<'3.14'",
Expand Down
20 changes: 18 additions & 2 deletions tests/end-to-end/test_visualization.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,21 @@
from copulas.datasets import sample_trivariate_xyz
from copulas.visualization import compare_3d
from copulas.datasets import (
sample_bivariate_age_income,
sample_trivariate_xyz,
sample_univariate_beta,
)
from copulas.visualization import compare_1d, compare_2d, compare_3d


def test_compare_1d():
data = sample_univariate_beta()

compare_1d(data, data)


def test_compare_2d():
df = sample_bivariate_age_income()

compare_2d(df, df)


def test_compare_3d():
Expand Down
Loading