разные размеры элементов с бэкэндом matplotlib - PullRequest
0 голосов
/ 03 ноября 2018

Я пытаюсь выполнить цветовую панель тепловой карты, чтобы добавить дополнительную информацию о kdims в моей тепловой карте. (Например, опция colSideColors, если вы знакомы с пакетом R's heatmap.2.)

Я могу получить хороший результат с боке-бэкэндом, но не знаю, как получить нестандартные (разные) размеры элементов при использовании бэкэнда matplotlib.

Может кто-нибудь сказать мне, как сделать полосовой график "короче" (менее "высоким") в примере бэкэнда matplotlib?

Настройка

import pandas as pd
import numpy as np
import holoviews as hv
hv.extension('bokeh', 'matplotlib')

# dummy data
samples = ['sample{}'.format(x) for x in range(5)]
df = pd.DataFrame(np.random.rand(5, 5),columns=samples, index=samples).reset_index()
df = df.melt(id_vars='index', var_name='y').rename(columns={'index': 'x'})

# column means
df_strip = df.groupby('x').mean().reset_index()
df_strip['y'] = 'dummy'

# make plots
heatmap = hv.HeatMap(df, kdims=['x','y'])
strip = hv.HeatMap(df_strip, kdims=['x','y'])

Результат с боке

%%output size=100 backend='bokeh'
(strip.options(xaxis=None, yaxis=None, height=50) + 
 heatmap.options(xrotation=90)).cols(1)

enter image description here

Результат с бэкэндом matplotlib

%%output size=100 backend='matplotlib'
%%opts Layout [sublabel_format='' vspace=0.1]

(strip.options(xaxis=None, yaxis=None, aspect=1) + 
 heatmap.options(xrotation=90, aspect=1)).cols(1)

enter image description here

hv.__version__
'1.10.8'

1 Ответ

0 голосов
/ 03 ноября 2018

К сожалению, в двух бэкэндах определение размеров работает очень по-разному, что означает, что может быть довольно трудно получить одинаковое поведение. В этом конкретном случае вы захотите установить больший аспект на графике полосы, а также сообщать макету, что он должен взвешивать аспект при вычислении размера графиков. Это выглядит примерно так:

%%output size=100 backend='matplotlib'
%%opts Layout [sublabel_format='' vspace=0.1 aspect_weight=1]
(strip.options(xaxis=None, yaxis=None, aspect=5) + 
 heatmap.options(xrotation=90, aspect=1)).cols(1)

enter image description here

...