2

我正在尝试创建一个具有多个轴的图。但是,不是将 Gene 和 db 放在 x 轴上,而将突变放在 y 轴上,holoviews 将 db 放在 y 轴上,将gene 放在 x 轴上。

我怎样才能得到一个多类别的情节呢?

mutated_positions = hv.Scatter(totaldf,
              ['gene', 'db'], 'mutations', xrotation=45).opts(size=10, color='#024bc2', line_color='#002869', jitter=0.2, alpha=0.5)

当前的图如下所示: https ://imgur.com/a/NNaIJdr 我试图得到这样的轴: https ://imgur.com/a/ZmXjvRa 在 Y 轴上有突变。

我正在使用的数据框如下所示:

      gene       db  mutations
0     IGHV1-3  G1K_CL2          6
1    IGHV1-58  G1K_CL2          2
2    IGHV1-58  G1K_CL2          3
3     IGHV1-8  G1K_CL2          2
4    IGHV3-16  G1K_CL2          3
..        ...      ...        ...
141  IGHV4-61  G1K_CL3         11
142  IGHV4-61  G1K_CL3         12
143  IGHV4-61  G1K_CL3         10
144  IGHV4-61  G1K_CL3         13
145  IGHV7-81  G1K_CL3          4
4

1 回答 1

1

下面的代码是将您的突变放在 y 轴上,并将 db 和/或基因放在 x 轴上的一种方式。
它创建一个Ndlayout,这意味着为每个基因创建一个单独的图。

# import libraries
import pandas as pd
import holoviews as hv
from holoviews import opts
hv.extension('bokeh')

# create dataframe
data = [
    ['IGHV4-61', 'G1K_CL2', 11],
    ['IGHV4-61', 'G1K_CL3', 12],
    ['IGHV4-61', 'G1K_CL3', 10],
    ['IGHV7-81', 'G1K_CL2', 13],
    ['IGHV7-81', 'G1K_CL3',  4],
]
df = pd.DataFrame(data, columns=['gene', 'db', 'mutations'])

# create layout plot with mutations on the y-axis
layout_plot = hv.Dataset(df).to.scatter('db', 'mutations').layout('gene')

# make plot look nicer
layout_plot = layout_plot.opts(opts.Scatter(size=10, ylim=(0, 15), width=250))

# show structure of holoviews layout plot
print(layout_plot)

# show plot in Jupyter
layout_plot

情节的结构如下所示:

:NdLayout [基因]

:Scatter [db] (突变)

结果图如下所示:
用于基因 db 和突变的 Ndlayout

作为替代方案,您还可以使用构建在 holoviews 之上的库 hvplot,它会为您提供与上述相同的功能。这与 pandas 绘图基本相同,您可以使用参数 by='gene' 和 subplots='True'来创建 Ndlayout。

# import libraries
import hvplot
import hvplot.pandas
hv.extension('bokeh')

# create layout plot with hvplot
layout_plot = df.hvplot(
    kind='scatter',
    x='db',
    y='mutations',
    by='gene',
    subplots=True,  # creates a layout
    size=100,  # marker size
    ylim=(0, 15), 
    width=250,  # width of plot
)

# show structure of holoviews layout plot
print(layout_plot)

# show plot in Jupyter
layout_plot
于 2019-09-20T18:51:37.837 回答