matplotlib 如何用条形图缩放Seaborn的y轴

p1iqtdky  于 2023-05-18  发布在  其他
关注(0)|答案(4)|浏览(119)

我使用factorplot(kind="bar")
如何缩放y轴,例如使用对数标度?
我试着修改图的坐标轴,但总是以这样或那样的方式弄乱条形图,所以请先尝试您的解决方案,以确保它真的有效。

4bbkushb

4bbkushb1#

考虑到你的问题提到了barplot,我想我会为这种类型的图添加一个解决方案,因为它不同于@Jules解决方案中的factorplot

import matplotlib.pyplot as plt
import seaborn as sns
sns.set(style="whitegrid")

xs = ["First", "First", "Second", "Second", "Third", "Third"]
hue = ["Female", "Male"] * 3
ys = [1988, 301, 860, 77, 13, 1]

g = sns.barplot(x=xs, y=ys, hue=hue)
g.set_yscale("log")
_ = g.set(xlabel="Class", ylabel="Survived")

如果你想用非对数的标签来标记y轴,你可以这样做。

import matplotlib.pyplot as plt
import seaborn as sns
sns.set(style="whitegrid")

xs = ["First", "First", "Second", "Second", "Third", "Third"]
hue = ["Female", "Male"] * 3
ys = [1988, 301, 860, 77, 13, 1]

g = sns.barplot(x=xs, y=ys, hue=hue)
g.set_yscale("log")

# the non-logarithmic labels you want
ticks = [1, 10, 100, 1000]
g.set_yticks(ticks)
g.set_yticklabels(ticks)

_ = g.set(xlabel="Class", ylabel="Survived")

ubof19bj

ubof19bj2#

注意:seaborn.factorplotseaborn.catplot替换,这是一个图形级函数。
sns.catplot直接接受log参数。

python 3.11.2matplotlib 3.7.1seaborn 0.12.2中测试

import seaborn as sns
import matplotlib.pyplot as plt
    
titanic = sns.load_dataset("titanic")

g = sns.catplot(x="class", y="survived", hue="sex",
                   data=titanic, kind="bar",
                   height=5, palette="muted", legend=False, log=True)
plt.show()

您可以在调用factorplot后使用Matplotlib命令。例如:

g = sns.factorplot(x="class", y="survived", hue="sex",
                   data=titanic, kind="bar",
                   height=5, palette="muted", legend=False)
g.fig.get_axes()[0].set_yscale('log')
plt.show()

2mbi3lxu

2mbi3lxu3#

如果您在使用以前的解决方案设置对数刻度时遇到消失的条形图的问题,请尝试将log=True添加到seaborn函数调用中。

python 3.11.2matplotlib 3.7.1seaborn 0.12.2中测试

使用sns.barplot

import seaborn as sns
import matplotlib.pyplot as plt

titanic = sns.load_dataset("titanic")

g = sns.barplot(x="class", y="survived", hue="sex",
                data=titanic, palette="muted", log=True)
g.set_ylim(0.05, 1)

sns.factorplot不再属于seaborn。请参阅此answer的替换。
使用sns.factorplot

import seaborn as sns
import matplotlib.pyplot as plt
sns.set(style="whitegrid")

titanic = sns.load_dataset("titanic")

g = sns.factorplot(x="class", y="survived", hue="sex", kind='bar',
                   data=titanic, palette="muted", log=True)
g.ax.set_ylim(0.05, 1)
eblbsuwk

eblbsuwk4#

Seaborn的catplot不再具有log参数。
对于那些寻找更新答案的人,这里是我使用过的最快的解决方案:你必须通过访问axes对象来使用matplotlib的内置支持。

g = sns.catplot(data=df, <YOUR PARAMETERS>)
for ax in g.fig.axes:
    ax.set_yscale('log')

相关问题