【问题标题】:Matplotlib to Create histogram by RowMatplotlib 按行创建直方图
【发布时间】:2022-01-16 14:18:56
【问题描述】:

我有三个数组,它们基本上对应于基因表达值矩阵,然后是指定条件 ID 的列标签和指定特定基因的行值。我正在尝试定义一个函数,只需提供基因名称即可绘制直方图。

基本上我需要指定 YAL001C 并创建跨行值的直方图。我对 matplotlib 很陌生,我不知道该怎么做。是否与使用类似 np.where(gene = YAL001C) 参数有关?我想我只是不确定它在哪里适合 matplotlib 的代码。

我目前有以下代码,但它不起作用:

def histogram(gene):
    fig = plt.figure()
    ax = fig.add_subplot(1, 1, 1)
    x = np.where(geneList == gene, exprMat)
    bins = 50
    ax.hist(x, bins, color = 'green', edgecolor = 'black', alpha = 0.8 )
    plt.show()

【问题讨论】:

  • 直方图是指柱状图吗?
  • 如果是这样,您有两个问题:(1)如何识别/提取行,(2)如何制作条形图。这两个网站都被问过很多次了。

标签: numpy matplotlib


【解决方案1】:

这是您可以实现的方法之一(将与相应行相关的数据传递给方法):

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

data = np.array([[0.15, -0.22, 0.07],
                 [-0.07, -0.76, -0.12],
                 [-1.22, -0.27, -0.1],
                 [-0.09, 1.2, 0.16]
                ])
df = pd.DataFrame(data=data, 
                  index=['YAL001C', 'YAL002W', 'YAL003W', 'YAL004W'], 
                  columns=['cln3-1', 'cln3-2', 'clb'])
print(df)

def plot_hist(gene):
    fig, ax = plt.subplots(1,2, figsize=(9,4))
    ax[0].bar(df.columns, df.loc[gene])
    ax[1].hist(df.loc[gene])
    plt.show()
    
plot_hist('YAL001C')

左:条形图,右:直方图

【讨论】:

  • 我实际上是在尝试定义一个函数,该函数采用基因名称并提供跨行的直方图。这不是一个函数,是垂直向下的。
  • 我相应地添加了一个功能,但不知道您所说的“......垂直向下”是什么意思。您需要水平条形图吗?此外,绘制直方图对于三个数据点没有多大意义。我假设你在每一行都有更多的数据点......
  • 这只是数据的一个sn-p。一共86个专栏,这里就不贴了。直方图需要反映整个行的值。如果我可能会问,我将如何在不使用 pandas 模块的情况下做到这一点?我试图只使用 numpy 编写一个函数,但遇到了与选择特定基因相关的问题。我试图对子集进行子集化,但无法使用字符串值这样做。
  • 我决定保留这个解决方案,以防将来可以帮助其他人。我添加了另一个解决方案而不使用 pandas 来满足您的要求。
【解决方案2】:

如果你想避免使用 pandas,你仍然可以使用 numpy 完成你想要的,但是你需要添加一些代码来确定对应的行给定的基因。这是您可以对其进行编码的方法之一:

import numpy as np
import matplotlib.pyplot as plt

data = np.array([[0.15, -0.22, 0.07],
                 [-0.07, -0.76, -0.12],
                 [-1.22, -0.27, -0.1],
                 [-0.09, 1.2, 0.16]
                ])

def plot_hist(gene):
    
    list_genes = ['YAL001C', 'YAL002W', 'YAL003W', 'YAL004W']
    if gene in list_genes:
        sn_gene = list_genes.index(gene)
    else:
        print(f'{gene} is not in the list of genes')
        return
    fig, ax = plt.subplots(figsize=(6,4))
    plt.hist(data[sn_gene,:])
    plt.title(f'gene: {gene}')
    plt.show()
    
plot_hist('YAL001C')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-04
    • 2022-08-12
    • 2011-07-16
    • 1970-01-01
    • 2012-02-17
    • 2013-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多