我正在尝试使用plotly包在R中创建水平条形图。由于图例项目的长度,我希望它们在2列中在视觉的顶部或底部水平显示。是否可以规定图例的列数?
我已经能够使用Layout(legend = list(orientation='h'))
成功地将图例放在x轴下方,但无论我在哪里放置图例(使用x和y参数),它总是只有一个长列表。我见过一个用于在js中创建多列图例的github项目,但不是r。
谢谢,
答案 0 :(得分:0)
这是不可能的正常方式。我认为它有自己的逻辑,决定了它有多少位置以及它将显示多少列。
所以我想如果你让你的绘图宽度更小,你可以达到它只显示2列的目标。
此外,您可以尝试通过将r
和l
设置为10来尝试使用边距属性(https://plot.ly/r/reference/#layout-margin),例如
另一个想法可能是使图例(https://plot.ly/r/reference/#layout-legend-font-size)中的字体大小更大,以便它只使用两列。希望它有所帮助。
答案 1 :(得分:0)
我读了同一个github页面,我认为这是不可能的,但似乎是!我只检查了 Python,但我希望这对你在 R 中的努力以及在 Python 中寻找信息的每个人都有帮助。遗憾的是,与其他软件包相比,这里关于 Plotly 的信息并不多。
设置 orientation='h'
是不够的。如果您希望它们位于不同的列中,您还必须将图例项放在不同的 legendgroup
中。这是带有图例标签的示例:
fig = go.Figure([
go.Scatter(x=best_neurons_df['Test Size'],
y=best_neurons_df['Training Accuracy Max'],
# You can write anything as the group name, as long as it's different.
legendgroup="group2",
name='Training',
mode='markers',
go.Scatter(x=best_neurons_df['Test Size'],
y=best_neurons_df['Validation Accuracy Max'],
# You can write anything as the group name, as long as it's different.
legendgroup="group1",
layout=dict(title='Best Model Dependency on Validation Split',
xaxis=dict(title='Validation Set proportion'),
yaxis=dict(title='Accuracy'),
margin=dict(b=100, t=100, l=0, r=0),
legend=dict(x=1, y=1.01,xanchor='right', yanchor='bottom',
title='',
orientation='h', # Remember this as well.
bordercolor='black',
borderwidth=1
))