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.