【问题标题】:prevent overlapping bars using seaborn with pandas plotting使用 seaborn 和 pandas 绘图防止重叠条
【发布时间】:2016-07-11 04:08:06
【问题描述】:

我正在尝试使用 pandas 绘图来创建一个带有 seaborn 导入的堆叠水平条形图。我想删除条之间的空间,但也不要让条重叠。这是我尝试过的:

import pandas as pd
import numpy as pd
import seaborn as sns

df = pd.DataFrame(np.random.rand(15, 3))
df.plot.barh(stacked=True, width=1)

这似乎可以在不导入 seaborn 的情况下工作,虽然我喜欢 seaborn 风格,而且它通常是我正在使用的 ipython 笔记本中的导入,这可能吗?

【问题讨论】:

  • " 我想删除条之间的空间,但也没有条重叠" --> 我不清楚你发布的图像是如何不重叠的满足这些标准。
  • 仔细观察绘图,例如 4 的红色部分与其下方的条重叠。这在具有更多条形的绘图中更为明显,并且具有足够的条形变得几乎难以辨认。
  • 如果保存图形时将dpi 参数设置得更高会怎样?
  • 将 dpi 设置为 1000 似乎并没有改善它

标签: pandas matplotlib ipython seaborn


【解决方案1】:

如果您将条形线宽设置为 seaborn 样式所具有的,则该工件在 matplotlib 默认值中也可见:

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.rand(15, 3))
df.plot(stacked=True, width=1, kind="barh", lw=.5)

解决方案是将条形线增加到 matplotlib 默认值的大致位置:

import pandas as pd
import numpy as np
import seaborn as sns

df = pd.DataFrame(np.random.rand(15, 3))
df.plot(stacked=True, width=1, kind="barh", lw=1)

【讨论】:

  • 有趣的是,无论我指定的线宽如何,这个问题似乎都消失了,我不确定我是否完全理解。不过,这确实解决了问题,谢谢。
【解决方案2】:

也许你应该减少线宽?

import seaborn as sns

f, ax = plt.subplots(figsize=(10, 10))
df.plot(kind='barh', stacked=True, width=1, lw=0.1, ax=ax)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-20
    • 2017-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-28
    • 2021-01-15
    相关资源
    最近更新 更多