我尝试在用Python Seaborn
模块的sns.boxplot()
创建的箱线图之间(绿色和橙子框之间)设置一个空间。请参见随附的图表,绿色和橙子子图框相互粘在一起,使其在视觉上不是最吸引人的。
不能找到一种方法来做到这一点,任何人都可以找到一种方法(代码附加)?
的数据
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
tips = sns.load_dataset("tips")
sns.set(style="ticks", palette='Set2', font='Roboto Condensed')
sns.set_context("paper", font_scale=1.1, rc={"lines.linewidth": 1.1})
g=sns.factorplot(x="time", y="total_bill", hue="smoker",
col="day", data=tips, kind="box", size=4, aspect=0.5,
width=0.8,fliersize=2.5,linewidth=1.1, notch=False,orient="v")
sns.despine(trim=True)
g.savefig('test6.png', format='png', dpi=600)
字符串Seaborn
箱线图文档在这里:http://stanford.edu/~mwaskom/software/seaborn/generated/seaborn.boxplot.html的
1条答案
按热度按时间xnifntxz1#
冒着不再需要这个的危险,我找到了解决这个问题的方法。当直接使用matplotlib绘制
boxplots
时,可以使用width
和position
关键字控制框的排列。但是,当将positions
关键字传递给sns.factorplot(kind='box',...)
时,会得到一个字符串
要解决这个问题,可以在创建箱线图后'手动' * 设置箱线图的宽度。这有点繁琐,因为这些盒子作为
PatchPatches
存储在sns.factorplot
返回的FacedGrid
的各个Axes
示例中。与Rects
的简单(x,y,width,height)
语法不同,PathPatches
使用顶点来定义角点,当需要调整框时,这涉及到稍微多一点的计算。最重要的是,matplotlib.boxplot
返回的PathPatches
包含Path.CLOSEPOLY
代码的额外(忽略)顶点,该顶点设置为(0,0)
,最好忽略。除了框外,标记中间线的水平线现在太宽,也需要调整。下面我定义了一个函数来调整OP示例代码生成的框的宽度(注意额外的导入):
型
调用此函数
型
给出以下输出:
的数据