Holoviews:在分组条形图中删除x轴上的变量名称

5
关于 HoloViews 分组(未堆叠)条形图的一个快速问题。如何删除 x 轴变量名称刻度,但在图例中包含它们?
请参见下面的示例:

barchart without legend and superfluous 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

谢谢!

3个回答

5
你可以在分组柱形图上使用.opts(multi_level=False)。
这将删除第二个分类变量的x轴刻度并为分组柱形图添加图例。

但是,你需要至少HoloViews >=1.13版本才能使用此功能。截至我撰写本文时,该版本尚不可用,但可以通过以下方式进行安装:

pip install 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的分组条形图


1
据我所搜寻,使用 holoview(bokeh)绘制的 pandas 图表没有您想要的样式。条形图没有图例,而组合图表中 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

enter image description here

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

1

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

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

解决方案1:将您的图表呈现为Bokeh图表,然后删除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


(个人备忘录:在jupyter中输入my_bokeh_plot.后按tab键可以获取有关my_bokeh_plot许多属性的良好见解,但另一种好方法是运行my_bokeh_plot.properties_with_values()来获取更难以理解的属性)。


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