Объединение двух разных типов графиков в Holoviews с использованием сложения в Python

#python #pandas #holoviews

#python #pandas #holoviews

Вопрос:

Я пытаюсь объединить 2 разных типа графиков. Оба графика имеют разные оси x и y, и так и должно быть. Я должен отправлять график только комбинированным способом. Ниже приведено то, что я пробовал и потерпел неудачу. Какие-либо обходные пути?

 import holoviews as hv
import pandas as pd

height_sub = 500
width_sub = 400

linechart1 = hv.Curve([(1,2,'crust'), (3,4,'moon'), (4,9, 'mars')])
bubbled1 = hv.Curve([(10,'blue'), (78,'pink')])

linechart1.opts(
    line_color='lightblue', 
#     size=10,
    width=width_sub,
    height=height_sub, 
#     color='lightblue',
#     show_grid=True
)

bubbled1.opts( 
    line_color='black', 
    size=5,
    width=width_sub,
    height=height_sub,
    color='blue',
#     show_grid=True
)
bubbled1  linechart1
  

Но попал в стек ошибок

 ~.condaenvspyenvlibsite-packagesholoviewsutil__init__.py in _options_error(cls, opt, objtype, backend, valid_options)
    415 
    416         if matches:
--> 417             raise ValueError('Unexpected option %r for %s type '
    418                              'across all extensions. Similar options '
    419                              'for current extension (%r) are: %s.' %

ValueError: Unexpected option 'size' for Curve type across all extensions. Similar options for current extension ('bokeh') are: ['fontsize'].
  

Возможно ли какое-либо обходное решение?

Ответ №1:

size это не вариант стиля для hv.Curve использования line_width вместо этого, если вы хотите более толстые линии.

 import holoviews as hv
hv.extension("bokeh")

height_sub = 500
width_sub = 400

linechart1 = hv.Curve([(1,2,'crust'), (3,4,'moon'), (4,9, 'mars')])
bubbled1 = hv.Curve([(10,'blue'), (78,'pink')])

linechart1.opts(
    line_color='lightblue', 
    line_width=10,
    width=width_sub,
    height=height_sub, 
    invert_axes=True
)

bubbled1.opts( 
    line_color='black', 
    line_width=5,
    width=width_sub,
    height=height_sub,
    color='blue',
)

layout = bubbled1   linechart1
layout.opts(shared_axes=False)
  

введите описание изображения здесь

Комментарии:

1. На самом деле я не хочу смешивать x, y кривой с x, y диаграммы точек. Возможно ли строить графики с их собственными значениями отдельных осей?

2. Да! Просто укажите shared_axes=False на hv.Layout объекте. Я обновил свой ответ, чтобы отразить это.

3. Спасибо, брат. Это потрясающе.

4. Человек, похоже, согласен. Можете ли вы рассказать мне больше о том, что мы можем поменять местами оси x и y в holoviews?

5. Просто нужно передать invert_axes=True в качестве опции кривую, на которую вы хотели бы изменить оси. Я обновлю свой ответ примером.