texlive[75003] Master/texmf-dist: tikzviolinplots (22apr25)

commits+karl at tug.org commits+karl at tug.org
Tue Apr 22 22:31:57 CEST 2025


Revision: 75003
          https://tug.org/svn/texlive?view=revision&revision=75003
Author:   karl
Date:     2025-04-22 22:31:56 +0200 (Tue, 22 Apr 2025)
Log Message:
-----------
tikzviolinplots (22apr25)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/tikzviolinplots/tikzviolinplots.pdf
    trunk/Master/texmf-dist/doc/latex/tikzviolinplots/tikzviolinplots.tex
    trunk/Master/texmf-dist/tex/latex/tikzviolinplots/tikzviolinplots.sty

Modified: trunk/Master/texmf-dist/doc/latex/tikzviolinplots/tikzviolinplots.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/tikzviolinplots/tikzviolinplots.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tikzviolinplots/tikzviolinplots.tex	2025-04-22 20:31:47 UTC (rev 75002)
+++ trunk/Master/texmf-dist/doc/latex/tikzviolinplots/tikzviolinplots.tex	2025-04-22 20:31:56 UTC (rev 75003)
@@ -299,6 +299,8 @@
 		\texttt{\&} and \texttt{ampersand}.
 	\item \texttt{index}: Necessary option, is the name of the column with
 		the data to be plotted.
+	\item \texttt{frequencies}: If set, is the name of the column with
+		the frequencies of the data to be plotted.
 	\item \texttt{kernel}: The function to be used for the kernel density
 		estimation; available values are \texttt{gaussian} (default),
 		\texttt{logistic}, \texttt{parabolic}, \texttt{uniform}

Modified: trunk/Master/texmf-dist/tex/latex/tikzviolinplots/tikzviolinplots.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tikzviolinplots/tikzviolinplots.sty	2025-04-22 20:31:47 UTC (rev 75002)
+++ trunk/Master/texmf-dist/tex/latex/tikzviolinplots/tikzviolinplots.sty	2025-04-22 20:31:56 UTC (rev 75003)
@@ -17,7 +17,7 @@
 % tikzviolinplots.tex.
 
 \NeedsTeXFormat{LaTeX2e}[1994/06/01]
-\ProvidesPackage{tikzviolinplots}[2025/02/26 v0.8.0 Violin plot creation in pgfplots]
+\ProvidesPackage{tikzviolinplots}[2025/04/21 v0.9.0 Violin plot creation in pgfplots]
 
 \RequirePackage{pgfplots}
 \RequirePackage{pgfplotstable}
@@ -36,6 +36,7 @@
 		kernel=gaussian,
 		bandwidth=NONE,
 		index=DATA,
+		frequencies=FREQINTERNALVIOLIN,
 		samples=50,
 		relative position=0
 		color=black,
@@ -59,6 +60,7 @@
 	kernel/.estore in = \violin at kernel,
 	bandwidth/.estore in = \violin at bandwidth,
 	index/.estore in = \violin at index,
+	frequencies/.estore in = \violin at frequencies,
 	samples/.estore in = \violin at samples,
 	relative position/.estore in = \violin at delta,
 	color/.estore in = \violin at color,
@@ -248,11 +250,29 @@
 	\pgfmathparse{0}
 	\let\violin at dataset@stddev\pgfmathresult
 	\let\violin at dataset@average\pgfmathresult
+	\let\violin at dataset@weightsum\pgfmathresult
+	\let\violin at weight@row\pgfmathresult
 
+	% Calculating averages
 	\pgfplotstableforeachcolumnelement{\violin at index}\of\theviolin at dataset@table\as\xi{%
-		\pgfmathparse{\violin at dataset@average+(\xi/(1+\violin at filename@lastindex))}
+		\ifthenelse{
+			\equal{\violin at frequencies}{FREQINTERNALVIOLIN}
+		}{
+			\pgfmathparse{1}
+			\let\violin at dataset@weight\pgfmathresult
+		}{
+			\pgfplotstablegetelem{\violin at weight@row}{\violin at frequencies}\of{\theviolin at dataset@table}
+			\let\violin at dataset@weight\pgfplotsretval
+			\pgfmathparse{\violin at weight@row+1}
+			\let\violin at weight@row\pgfmathresult
+		}
+		\pgfmathparse{\violin at dataset@weightsum+\violin at dataset@weight}
+		\let\violin at dataset@weightsum\pgfmathresult
+		\pgfmathparse{\violin at dataset@average+\xi*\violin at dataset@weight}
 		\let\violin at dataset@average\pgfmathresult
 	}
+	\pgfmathparse{\violin at dataset@average/\violin at dataset@weightsum}
+	\let\violin at dataset@average\pgfmathresult
 
 	\ifthenelse{
 		\equal{\violin at datapoints}{true}
@@ -275,20 +295,36 @@
 		\def\violin at axis@y{y}
 	}
 
+	% Bandwidth calculation
 	\ifthenelse{%
 		\equal{\violin at bandwidth}{NONE}%
 	}{%
+		\pgfmathparse{0}
+		\let\violin at weight@row\pgfmathresult
+		% Standard deviation calculation
 		\pgfplotstableforeachcolumnelement{\violin at index}\of\theviolin at dataset@table\as\xi{%
-			\pgfmathparse{\violin at dataset@stddev+(\xi-\violin at dataset@average)^2}
+			\ifthenelse{
+				\equal{\violin at frequencies}{FREQINTERNALVIOLIN}
+			}{
+				\pgfmathparse{1}
+				\let\violin at dataset@weight\pgfmathresult
+			}{
+				\pgfplotstablegetelem{\violin at weight@row}{\violin at frequencies}\of{\theviolin at dataset@table}
+				\let\violin at dataset@weight\pgfplotsretval
+				\pgfmathparse{\violin at weight@row+1}
+				\let\violin at weight@row\pgfmathresult
+			}
+			\pgfmathparse{\violin at dataset@stddev+\violin at weight@row*(\xi-\violin at dataset@average)^2}
 			\let\violin at dataset@stddev\pgfmathresult
 		}
-		\pgfmathparse{sqrt(\violin at dataset@stddev/(1+\violin at filename@lastindex))}
+		\pgfmathparse{sqrt(\violin at dataset@stddev/\violin at dataset@weightsum)}
 		\let\violin at dataset@stddev\pgfmathresult
-		\pgfmathparse{1.06*\violin at dataset@stddev*((1+\violin at filename@lastindex)^(-0.2))}%
+		\pgfmathparse{1.06*\violin at dataset@stddev*(\violin at dataset@weightsum^(-0.2))}%
 		\let\violin at bandwidth\pgfmathresult
 	}{%
 	}
 
+	% Setting limits for curve
 	\pgfplotstablegetelem{0}{\violin at index}\of{\theviolin at dataset@table}
 	\let\violin at dataset@min\pgfplotsretval
 	\let\violin at dataset@max\pgfplotsretval
@@ -320,6 +356,7 @@
 	\pgfmathparse{\violin at dataset@max + 3*\violin at bandwidth}
 	\let\violin at dataset@max\pgfmathresult
 
+	% Creating curve domain
 	\pgfplotstableset{
 		create on use/list/.style={create col/expr={
 			\violin at dataset@min + (\violin at dataset@max-\violin at dataset@min)
@@ -328,6 +365,7 @@
 	}
 
 
+	% Calculating KDE
 	\pgfplotstablenew[columns={list}]{\violin at samples}\violin at kde
 
 	\pgfmathparse{0.0}
@@ -335,15 +373,25 @@
 
 	\pgfplotstablecreatecol[
 		create col/assign/.code={
-			\pgfmathparse{\violin at filename@lastindex+1}
-			\let\violin at filename@lastindex\pgfmathresult
 			\pgfmathparse{%
-				1.0/(\violin at filename@lastindex*\violin at bandwidth)
+				1.0/(\violin at dataset@weightsum*\violin at bandwidth)
 			}
 			\let\violin at kde@factor\pgfmathresult
 			\pgfmathparse{0}
 			\let\violin at kde@accum\pgfmathresult
+			\let\violin at weight@row\pgfmathresult
 			\pgfplotstableforeachcolumnelement{\violin at index}\of\theviolin at dataset@table\as\xi{%
+				\ifthenelse{
+					\equal{\violin at frequencies}{FREQINTERNALVIOLIN}
+				}{
+					\pgfmathparse{1}
+					\let\violin at dataset@weight\pgfmathresult
+				}{
+					\pgfplotstablegetelem{\violin at weight@row}{\violin at frequencies}\of{\theviolin at dataset@table}
+					\let\violin at dataset@weight\pgfplotsretval
+					\pgfmathparse{\violin at weight@row+1}
+					\let\violin at weight@row\pgfmathresult
+				}
 				\pgfmathparse{%
 					((\xi-\thisrow{list})/%
 					\violin at bandwidth)}
@@ -352,7 +400,7 @@
 					\equal{\violin at kernel}{gaussian}
 				}{
 					\pgfmathparse{\violin at kde@accum + %
-						e^(-0.5*\violin at u*\violin at u)/sqrt(2*pi)}
+						\violin at dataset@weight*e^(-0.5*\violin at u*\violin at u)/sqrt(2*pi)}
 					\let\violin at kde@accum\pgfmathresult
 				}{}
 				\ifthenelse{
@@ -359,7 +407,7 @@
 					\equal{\violin at kernel}{logistic}
 				}{
 					\pgfmathparse{\violin at kde@accum + %
-						1/(e^\violin at u + 2 + e^(-\violin at u))
+						\violin at dataset@weight*1/(e^\violin at u + 2 + e^(-\violin at u))
 					}
 					\let\violin at kde@accum\pgfmathresult
 				}{}
@@ -373,7 +421,7 @@
 						\equal{\pgfmathresult}{0}
 					}{
 						\pgfmathparse{\violin at kde@accum + %
-							0.75*(1-\violin at u*\violin at u)
+							\violin at dataset@weight*0.75*(1-\violin at u*\violin at u)
 						}
 					}{
 						\pgfmathparse{\violin at kde@accum}
@@ -389,7 +437,7 @@
 					\ifthenelse{
 						\equal{\pgfmathresult}{0}
 					}{
-						\pgfmathparse{\violin at kde@accum + 0.5}
+						\pgfmathparse{\violin at kde@accum + \violin at dataset@weight*0.5}
 					}{
 						\pgfmathparse{\violin at kde@accum}
 					}
@@ -405,7 +453,7 @@
 						\equal{\pgfmathresult}{0}
 					}{
 						\pgfmathparse{\violin at kde@accum + %
-							1-abs(\violin at u)}
+							\violin at dataset@weight*(1-abs(\violin at u))}
 					}{
 						\pgfmathparse{\violin at kde@accum}
 					}



More information about the tex-live-commits mailing list.