Holoviews:从分组条形图的 x 轴上删除变量名称
Holoviews: Remove variables names from x axis on grouped bar chart
关于 HoloViews 分组(非堆叠)条形图的快速问题。如何删除 x 轴变量名称刻度,但将它们包含在图例中?
请看下面的例子:
我想做以下事情:
- 对于红色框,删除刻度的名称 "x" 和 "y"
- 为 "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
谢谢!
据我搜索,pandas plot with holoview (bokeh) 不提供您想要的样式。条形图没有图例,组图在 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 目录,它会提供 setting legends and xlabels manually.
问题 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)
问题二:给分组条形图添加图例:
仍在寻找这个问题的答案。我认为这也必须使用 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()
对于更困难的属性)。
您可以在您的分组条形图上使用 .opts(multi_level=False)。
这将删除次要分类变量的 x-ticks 并向分组的条形图添加图例。
但是,为此您需要 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)
结果图:
关于 HoloViews 分组(非堆叠)条形图的快速问题。如何删除 x 轴变量名称刻度,但将它们包含在图例中?
请看下面的例子:
我想做以下事情:
- 对于红色框,删除刻度的名称 "x" 和 "y"
- 为 "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
谢谢!
据我搜索,pandas plot with holoview (bokeh) 不提供您想要的样式。条形图没有图例,组图在 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 目录,它会提供 setting legends and xlabels manually.
问题 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)
问题二:给分组条形图添加图例:
仍在寻找这个问题的答案。我认为这也必须使用 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()
对于更困难的属性)。
您可以在您的分组条形图上使用 .opts(multi_level=False)。
这将删除次要分类变量的 x-ticks 并向分组的条形图添加图例。
但是,为此您需要 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)
结果图: