微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Seaborn 小提琴图未按计数正确缩放

如何解决Seaborn 小提琴图未按计数正确缩放

我正在尝试按计数缩放我的小提琴图,但最后三把小提琴(每个都基于三个数据点)比前三个小提琴大得多,前三个小提琴基于更多。

我的代码如下:

fig = plt.figure(figsize=(20,10))
grid = plt.GridSpec(1,1,wspace=0.15,hspace=0)

plotol= fig.add_subplot(grid[0,0])
olivine = sns.violinplot(x=olivinedata.Sample,y=olivinedata.FoContent,scale='count',hue=olivinedata.RimCore,order=["85B","95B","98","LZa* (Tranquil)","LZa* (Banded)","LZb* ","LZa","LZb","LZc"],ax=plotol)
plotol.set_xticklabels(plotol.get_xticklabels(),rotation=20,fontsize = 15,horizontalalignment='right')
plotol.set_yticklabels(plotol.get_yticks(),size=15)


plotol.set_xlabel("Sample",size = 24,alpha=0.7)
plotol.set_ylabel("Fo# (mol. %)",alpha=0.7)
plt.setp(plotol.get_legend().get_texts(),fontsize='22')
plotol.legend(title="Measurement Type")

我也收到一条警告消息

用户警告:FixedFormatter 只能与 FixedLocator 一起使用 如果 sys.path[0] == '':

由于包含该行而产生的结果:

plotol.set_yticklabels(plotol.get_yticks(),size=15)

我不知道为什么。任何帮助表示赞赏!

Violin Plot

解决方法

您可能需要 scale_hue=False,否则按 x 类别进行缩放。

这是 scale 选项的比较,有和没有 scale_hue

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import seaborn as sns

df1 = pd.DataFrame({'sample': np.repeat([*'ABC'],20),'hue': np.repeat([*'BBRBRB'],10),'val': np.random.uniform(10,20,60)})
df2 = pd.DataFrame({'sample': np.repeat([*'XYZ'],3),'hue': np.repeat([*'BBB'],9)})
fig,axes = plt.subplots(nrows=2,ncols=3,figsize=(24,8))
for row,scale_hue in zip([0,1],[True,False]):
    for ax,scale in zip(axes[row,:],['area','count','width']):
        sns.violinplot(data=pd.concat([df1,df2]),x='sample',y='val',hue='hue',scale=scale,scale_hue=scale_hue,ax=ax)
        ax.set_title(f"scale='{scale}',scale_hue={scale_hue}",size=16)
plt.tight_layout()
plt.show()

comparison violinplot scale count

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。