我正在查看示例,但所有内容都需要数据框。
如果我有以下数据框:
x = ["G","F","E","D","C","B"]
y = [3,14,45,47,34,15]
df = pd.DataFrame(
{'Band': x,
'Count': y,
})
我想创建一个小提琴图,使用Count
作为值,Band
作为步骤,所以我这样做了:
ax = sns.violinplot( y="Count", data=df)
产生这个:
但是,我希望Bands
上有y axis
,然后Count
为每个等级的凸起大小。您是否必须仅使用continuous values
上的y axis
?
修改
我希望它看起来像:
答案 0 :(得分:1)
小提琴图通常用于描绘数据集的核密度。目前尚不清楚离散数据集的内核密度应该是多少,但您可以通过将字母"B", "C", "D", ...
映射到整数0,1,2,...
然后绘制小提琴来假设您的离散情况是连续的。 / p>
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()
这给出了一些关于字母分布的一般提示。然而,对于定量使用,人们可能宁愿绘制条形图。
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()
现在你当然可以用类似小提琴的方式设计条形图,或者称它为“christmastree plot”。
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()