繁体   English   中英

西雅图与大熊猫的y轴缩放

[英]y-axis scaling in seaborn vs pandas

我正在使用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'])

奇怪的是,seaborn无法正确缩放轴。 但是,您可以更正此行为。 首先,获得对图的轴对象的引用:

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

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

lm.axes[0,0].set_ylim(min(subdf.speed), max(subdf.speed))

结果应如下所示:

在此处输入图片说明

示例Jupyter笔记本在这里

Seaborn和matplotlib在绘制时应仅忽略NaN值。 您应该可以保留它们。

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

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

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

或在绘制之前转换为对数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 代替

Matplot lib为我正确缩放和绘图,如下所示:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM