在seaborn与熊猫中的y轴缩放

时间:2016-04-13 10:42:44

标签: python pandas seaborn

我正在使用pandas数据框绘制散点图。这工作正常,但我想使用seaborn主题和特殊功能。当我绘制调用seaborn的相同数据点时,y轴几乎不可见。 X轴值范围为5000-15000,而y轴值范围为[-6:6]*10^-7

如果我将y轴值乘以10 ^ 6,它们会正确显示,但使用seaborn绘制时的实际值在seaborn生成的绘图中仍然不可见/无法区分。

我如何seaborn以便y轴值在结果图中自动缩放?

此外,有些行甚至包含NaN,在这种情况下,如何在绘图时忽略该行,而不是手动清除包含NaN的行。

以下是我用来绘制的代码。

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


df = pd.read_csv("datascale.csv")
subdf = df.loc[(df.types == "easy") & (df.weight > 1300), ]

subdf = subdf.iloc[1:61, ]
subdf.drop(subdf.index[[25]], inplace=True) #row containing NaN

subdf.plot(x='length', y='speed', style='s') #scales y-axis correctly

sns.lmplot("length", "speed", data=subdf, fit_reg=True, lowess=True) #doesn't scale y-axis properly

# multiplying by 10^6 displays the plot correctly, in matplotlib
plt.scatter(subdf['length'], 10**6*subdf['speed'])

2 个答案:

答案 0 :(得分:2)

奇怪的是,seaborn没有正确地缩放轴。尽管如此,您可以纠正此行为。首先,获取对图的轴对象的引用:

numberOfDigits.length

之后,您可以手动设置y轴限制:

lm = sns.lmplot("length", "speed", data=subdf, fit_reg=True)

结果应如下所示:

enter image description here

示例Jupyter notebook here

答案 1 :(得分:0)

Seaborn和matplotlib在绘图时应该忽略NaN值。你应该能够保持原样。

关于y缩放:seaborn中可能存在错误。

最基本的解决方法仍然是在绘图之前缩放数据。 在绘制之前在数据框中缩放到微速度,然后绘制微积分。

subdf['microspeed']=subdf['speed']*10**6

或在绘图前转换为log y,即

import math
df = pd.DataFrame({'speed':[1, 100, 10**-6]})
df['logspeed'] = df['speed'].map(lambda x: math.log(x,10))

然后绘制logspeed而不是速度。

另一种方法是使用seaborn regplot instead

Matplot lib为我正确地缩放和绘制如下:

plt.plot(subdf['length'], subdf['speed'], 'o')