dbo*_*ouz 10 python python-3.x pandas seaborn
根据变量,seaborn目前提供通过设置来分割小提琴的功能。我想制作一个“半”小提琴图,即每个小提琴的一半被省略的图。对于每个连续变量,此类图描绘了类似于pdf的内容,仅绘制在每个类别变量的每个垂直线的一侧。split=Truehue
我设法欺骗seaborn了使用绘制的值范围之外的额外数据点和额外的虚拟色调来绘制此图形,但是我想知道是否可以在不实际更改数据集的情况下(例如在sns.violinplot()参数内)完成此操作。
例如,此图:
是由以下代码段创建的:
# imports
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
# load dataset from seaborn
datalist = sns.get_dataset_names()
dataset_name = 'iris'
if dataset_name in datalist:
df = sns.load_dataset(dataset_name)
else:
print("Dataset with name: " + dataset_name + " was not found in the available datasets online by seaborn.")
# prepare data
df2 = df.append([-999,-999,-999,-999,'setosa'])
df2['huecol'] = 0.0
df2['huecol'].iloc[-1]= -999
# plot
fig = plt.figure(figsize=(6,6))
sns.violinplot(x='species',y="sepal_width",
split=True, hue ='huecol', inner = 'quartile',
palette="pastel", data=df2, legend=False)
plt.title('iris')
# remove hue legend
leg = plt.gca().legend()
leg.remove()
plt.ylim([1,5.0])
plt.show()
Run Code Online (Sandbox Code Playgroud)
mwa*_*kom 11
不需要修改数据:
ax = sns.violinplot(
data=tips,
x="day", y="total_bill", hue=True,
hue_order=[True, False], split=True,
)
ax.legend_ = None
Run Code Online (Sandbox Code Playgroud)
我一直在寻找与此类似的解决方案,但没有找到令人满意的解决方案。我最终多次调用seaborn.kdeplot,因为violinplot本质上是一个单边核密度图。
categorical_kde_plot下面的函数定义
categorical_kde_plot(
df,
variable="tip",
category="day",
category_order=["Thur", "Fri", "Sat", "Sun"],
horizontal=False,
)
Run Code Online (Sandbox Code Playgroud)
使用horizontal=True,输出将如下所示:
categorical_kde_plot(
df,
variable="tip",
category="day",
category_order=["Thur", "Fri", "Sat", "Sun"],
horizontal=False,
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
991 次 |
| 最近记录: |