2016-11-09 19 views
0

让我们来看看Python 3.5和Seaborn在一些数据上创建的swarmplot(存储在熊猫数据框df中,列标签存储在另一个类中)无论现在,只看图):Python,Seaborn:对数Swarmplot在群体中有意想不到的差距

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重新计算点的位置以创建更好看的群集?

+7

当人们自愿花时间来回答问题,尽量让他们尽可能地容易帮助,这对你最有利。有人可能完全有可能知道他们头顶上的答案,但几乎总是一个志愿者将所提供的数据和它一起玩,直到他们有一个满意的答案。然后他们与你分享。不提供数据使得人们难以发明数据,因此他们可以玩耍。再次,有人可能知道答案,你无论如何得到帮助。我唯一的观点是你提供数据可以大大提高你的赔率。 – piRSquared

+0

完全同意!在这种情况下,这可能是因为您的数据帧中有NaN或其他东西... –

+1

首先设置了日志范围 – mwaskom

回答

1

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) 

这产生在正确的和所需的绘图行为: enter image description here

相关问题