如何使用Seaborn绘制对数刻度的直方图

5
我的问题很简单:我想使用Seaborn模块可视化多个直方图,然而,由于许多条柱包含非常少的计数,我想使用对数刻度来可视化垂直轴。
到目前为止,我的代码如下:
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

df = pd.DataFrame(np.random.rand(100,2), columns=['A','B'])
df = pd.melt(df, var_name='Category')     
g = sns.FacetGrid(df, col='Category', sharex=True, sharey=False, aspect=1.5)
g = g.map(plt.hist, "value", color="r")

这给我提供了以下图像: 在此输入图片描述

如何以最“Pythonic”/“Seabornic”的方式将垂直轴更改为对数比例?我在各种答案中查找,但迄今为止都不满意。

更新: 按照这里的答案添加以下代码会使我的条形图消失:

g.fig.get_axes()[0].set_yscale('log')

更新二:以下代码解决了我的问题:
df = pd.DataFrame(np.random.rand(100,2), columns=['A','B'])
df = pd.melt(df, var_name='Category')     
g = sns.FacetGrid(df, col='Category', sharex=True, sharey=False, aspect=1.5)
g = g.map(plt.hist, "value", color="r", log=True)
1个回答

6
我刚刚添加了最后几行:
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

df = pd.DataFrame(np.random.rand(100,2), columns=['A','B'])
df = pd.melt(df, var_name='Category')  

g = sns.FacetGrid(df, col='Category', col_wrap=2, sharex=True, sharey=False, aspect=1.5)
g = g.map(plt.hist, "value", color="r")
g.axes[0].set_yscale('log')
g.axes[1].set_yscale('log')

enter image description here


坐标轴变成了对数刻度,但是条形图消失了。你有什么想法是原因吗? - Archie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接