簡體   English   中英

Python:'numpy.ndarray' 對象沒有屬性 'violinplot'

[英]Python: 'numpy.ndarray' object has no attribute 'violinplot'

過去幾周我一直在使用 matplotlib,學習如何制作不同的圖表等。 我目前處於靜止狀態。 我正在處理基因表達數據,所以我有一個包含 3 列數據(突變、移碼和非突變)的 csv 文件。 但是,我正在嘗試制作小提琴圖,但不斷收到錯誤消息:

Traceback (most recent call last):
  File "/home/fmohamed/Documents/violinplot_script.py", line 39, in <module>
    axes.violinplot(all_data,
AttributeError: 'numpy.ndarray' object has no attribute 'violinplot'

我不確定我做錯了什么,但我的代碼位於下面:

import matplotlib.pyplot as plt
import numpy as np
import csv

#import data:
with open('/home/fmohamed/Documents/oc_data.csv') as csvfile:
    spamreader = csv.reader(csvfile, delimiter = ' ')
    array = []
    for row in spamreader:
           array.append(row)

# sort out bad data:
splitArray = [row[0].split(',') for row in array]
splitArray = [row for row in splitArray if row[0] != '' and row[1] != '' and 
row[2] != '']
descr = splitArray[0]
splitArray.pop(0) #remove the column descriptions from array
all_data = []
for row in splitArray:
    all_data.append(float(row[0]))
    all_data.append(float(row[1]))
    all_data.append(float(row[2]))

all_data = np.array(all_data)

fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(12, 5))

# plot violin plot
axes.violinplot(all_data,
               showmeans=False,
               showmedians=False)
axes.set_title('violin plot')


# adding horizontal grid lines
axes.yaxis.grid(True)
axes.set_xticks([y+1 for y in range(len(all_data))])
axes.set_xlabel('xlabel')
axes.set_ylabel('ylabel')

# add x-tick labels
plt.setp(axes, xticks=[y+1 for y in range(len(all_data))],
     xticklabels=['mutated', 'frameshift', 'nonmutated'])

plt.show()

預先感謝大家提供的任何幫助。

檢查 matplotlib 的版本,因為 violinplots 僅在matplotlib 1.4 之后可用。 要檢查 matplotlib 版本,只需在你的 python 終端中輸入:

>>> import matplotlib
>>> print matplotlib.__version__

我遇到了一個非常相似的問題。 問題在於,當您添加多個子圖時, axes對象不再是 Matplotlib axis類型,而是多個此類對象的 Numpy 數組。

解決方案是在循環中調用violinplot

for ax in axes:
    ax.violinplot(all_data,
               showmeans=False,
               showmedians=False)
    ax.set_title('violin plot')

請注意,如果您的行和列都 >1,則需要有一個嵌套循環,因為您有一個 2D Numpy 數組。

當然,這只是多次重復相同的圖,因此您可能希望將all_data幾個不同示例放入與axes具有相同維度的 Numpy 數組中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM