Python,Seaborn:Logarithmic Swarmplot在群体中有意想不到的差距

时间:2016-11-09 16:11:16

标签: python pandas seaborn logarithm

让我们看看一个swarmplot,用Python 3.5和Seaborn制作一些数据(存储在一个pandas数据帧df中,列标签存储在另一个类中。这没关系,现在看看积):

ax = sns.swarmplot(x=self.dte.label_temperature, y=self.dte.label_current, hue=self.dte.label_voltage, data = df)

Linear y axis

现在,如果在y轴上以对数刻度绘制数据,则数据更具可读性,因为它可以持续几十年。 因此,让我们将缩放比例更改为对数:

ax.set_yscale("log")
ax.set_ylim(bottom = 5*10**-10)

Log y axis

我对群中的空隙有疑问。我猜他们在那里,因为他们已经在那里创建了一个线性轴的情节,并且点不应该在那里重叠。但是现在它们看起来很奇怪,并且有足够的空间来容纳4个相同的群体。 我的问题是:我怎样才能强迫Seaborn重新计算圆点的位置以创造更好看的群体?

1 个答案:

答案 0 :(得分:3)

mwaskom在评论中向我暗示如何解决这个问题。 它甚至在沼泽地doku中说明:

  

请注意,正确排列点需要在数据和点坐标之间进行精确转换。这意味着应在绘制swarm图之前设置非默认轴限制。

将现有轴设置为对数刻度,并将其用于绘图:

    fig = plt.figure() # create figure
    rect = 0,0,1,1 # create an rectangle for the new axis
    log_ax = fig.add_axes(rect) # create a new axis (or use an existing one)
    log_ax.set_yscale("log") # log first
    sns.swarmplot(x=self.dte.label_temperature, y=self.dte.label_current, hue=self.dte.label_voltage, data = df, ax = log_ax)

这会产生正确和理想的绘图行为: enter image description here