0

让我们看一个使用 Python 3.5 和 Seaborn 在一些数据上制作的 swarmplot(它存储在 pandas 数据框 df 中,列标签存储在另一个类中。现在这无关紧要,只看图):

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

线性y轴

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

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

对数 y 轴

好吧,我对蜂群中的间隙有疑问。我猜他们在那里,因为当情节是在考虑线性轴的情况下创建时它们就在那里,并且这些点不应该在那里重叠。但是现在它们看起来有点奇怪,并且有足够的空间来组成 4 个看起来相同的群体。我的问题是:如何强制seaborn重新计算点的位置以创建更好看的群体?

4

1 回答 1

3

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

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

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

    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)

这会产生正确和所需的绘图行为: 在此处输入图像描述

于 2016-11-16T13:38:12.197 回答