Графики скрипки обычно используются для отображения плотности ядра набора данных.Непонятно, какой должна быть плотность ядра дискретного набора данных, но вы, конечно, можете считать, что ваш дискретный случай является непрерывным, сопоставив буквы "B", "C", "D", ...
с целыми числами 0,1,2,...
и затем нанеся на карту скрипку.
import matplotlib.pyplot as plt
import seaborn as sns
x = ["G","F","E","D","C","B"]
y = [3,14,45,47,34,15]
data = []
for i, yi in enumerate(y):
data.extend([i]*yi)
sns.violinplot(y=data)
plt.yticks(range(len(x)), x)
plt.show()
![enter image description here](https://i.stack.imgur.com/Oto9A.png)
Это дает общий совет о распределении писем.Однако для количественного использования, скорее всего, лучше построить гистограмму.
import matplotlib.pyplot as plt
import numpy as np
x = ["G","F","E","D","C","B"]
y = [3,14,45,47,34,15]
plt.barh(np.arange(len(x)), y)
plt.yticks(np.arange(len(x)), x)
plt.show()
![enter image description here](https://i.stack.imgur.com/UpC4n.png)
Теперь вы, конечно, можете стилизовать эту гистограмму таким образом, чтобыпохожа на скрипку, или, может быть, назовите ее «сюжет рождественского дерева».
import matplotlib.pyplot as plt
import matplotlib.ticker as mticker
import numpy as np
x = ["G","F","E","D","C","B"]
y = [3,14,45,47,34,15]
plt.barh(np.arange(len(x)), y, height=1, color="C0")
plt.barh(np.arange(len(x)), -np.array(y), height=1, color="C0")
plt.yticks(np.arange(len(x)), x)
# create strictly positive ticklabels
posfmt = mticker.FuncFormatter(lambda x,_: "{:g}".format(np.abs(x)))
plt.gca().get_xaxis().set_major_formatter(posfmt)
plt.show()
![enter image description here](https://i.stack.imgur.com/EUuF7.png)