Skip to content
Next Next commit
Added conversion from datetime to float for position and width parame…
…ters in violinplot
  • Loading branch information
hasanrashid committed Sep 2, 2025
commit 963ab32162955a3abe816225b8f1084b4f272fab
19 changes: 18 additions & 1 deletion lib/matplotlib/axes/_axes.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,8 @@
from matplotlib.axes._secondary_axes import SecondaryAxis
from matplotlib.container import BarContainer, ErrorbarContainer, StemContainer
from matplotlib.transforms import _ScaledRotation

import matplotlib.dates as mdates
import datetime
_log = logging.getLogger(__name__)


Expand Down Expand Up @@ -9051,6 +9052,22 @@ def violin(self, vpstats, positions=None, vert=None,
elif len(positions) != N:
raise ValueError(datashape_message.format("positions"))

#Checks if position is datetime; Converts to float if it is
if positions is not None:
positions = [
mdates.date2num(pos) if isinstance(pos, (datetime.datetime, datetime.date)) else pos
for pos in positions
]

#Check if width is provided as time difference; convert to days if it is
if widths is not None:
if np.isscalar(widths):
widths = [widths] * N
widths = [
w.days if isinstance(w, datetime.timedelta) else w
for w in widths
]

# Validate widths
if np.isscalar(widths):
widths = [widths] * N
Expand Down