4

关于 HoloViews 分组(未堆叠)条形图的快速问题。如何删除 x 轴变量名称刻度,但将它们包含在图例中?

请看下面的例子:

没有图例和多余 xticks 的条形图

我想做以下事情:

  1. 对于红色框,删除刻度“x”和“y”的名称
  2. 添加与各自颜色对齐的“x”和“y”的图例。

下面的代码:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
import holoviews as hv
pd.options.plotting.backend = 'holoviews'

df1 = pd.DataFrame({
    'x': np.random.rand(10), 
    'y': np.random.rand(10),
})

my_plot = df1.plot(kind='bar')
my_plot

谢谢!

4

3 回答 3

4

您可以在分组的 ba​​rplot 上使用 .opts(multi_level=False)
这将删除二级分类变量的 x-ticks,并将图例添加到分组条形图中。

但是,为此您需要 HoloViews >=1.13。
在我撰写本文时,此版本尚不可用,但您可以通过以下方式安装它:

点安装 git+ https://github.com/holoviz/holoviews.git


代码示例:

import numpy as np
import pandas as pd
import holoviews as hv
pd.options.plotting.backend = 'holoviews'

df1 = pd.DataFrame({
    'x': np.random.rand(10), 
    'y': np.random.rand(10),
})

my_grouped_barplot = df1.plot(kind='bar')

# remove the 2nd categorical level with multi_level=False
# this will remove your x-ticks and add a legend
my_grouped_barplot.opts(multi_level=False)


结果图:

添加了图例并删除了 xticks 的分组条形图

于 2020-01-16T13:52:35.303 回答
1

据我搜索,带有全息视图(散景)的熊猫图不提供您想要的样式。条形图没有图例,组图在 x 标签中有名称。

相反,使用 matplotlib 作为后端很容易。

import pandas as pd
import numpy as np

pd.options.plotting.backend = 'matplotlib'

df1 = pd.DataFrame({
                    'x': np.random.rand(10), 
                    'y': np.random.rand(10)
                    })

Plot = df1.plot(kind = 'bar', rot=0)
Plot

在此处输入图像描述

如果您编辑 Bokeh 目录,它会提供手动设置图例和 xlabels。

于 2020-01-11T04:40:01.863 回答
1

问题 1:从分组条形图中删除 xticks:

通常您可以your_plot.opts(xticks=[(None)])删除 xticks,但不幸的是,这对于分组条形图是不可能的。

解决方案 1:将您的绘图渲染为散景图,然后删除 xticks:

from bokeh.plotting import show

# create holoviews plot
my_holoviews_plot = df1.plot(kind='bar')

# render holoviews plot to bokeh plot
my_bokeh_plot = hv.render(my_holoviews_plot, backend='bokeh')

# apply changes to bokeh plot
my_bokeh_plot.xaxis.major_label_text_font_size = '0pt'

# visualize plot
show(my_bokeh_plot)



问题 2:在分组条形图中添加图例:
仍在寻找这个问题的答案。我认为使用 Bokeh 这也必须是可能的。
在这里查看我的问题:https


://discourse.bokeh.org/t/add-legend-afterwards-to-bokeh-plot/4519/3(我自己的心理笔记:您可以很好地了解 my_bokeh_plot 的许多属性通过在 jupyter 中按 tabmy_bokeh_plot.键,但另一种好方法是运行my_bokeh_plot.properties_with_values()更困难的属性)。

于 2020-01-14T21:03:14.203 回答