我是Python的初学者(在Spyder 3.3.2和Anaconda Navigator 1.9.6中使用Python 3.7)。创建海洋小提琴图没有问题,但是当我尝试Facetgrid它们时,我遇到了问题。我尝试使用catplot。
# Libraries
import seaborn as sns
import pandas as pd
import os # Imports `os`
from matplotlib import pyplot as plt
os.chdir(r"XXXXXX") # Changes directory
os.listdir('.') # Lists all files and directories in current directory
## Data set
File = 'test_eventcountratios.xlsx' # Assigns Excel filename to File
df = pd.read_excel(File)
ax = sns.violinplot(x = df["Timepoint"], y = df["Macrophage Frequency"], palette = "Blues")
ax.set_xticklabels(ax.get_xticklabels(),rotation=30)
我的数据为long form,所以所有时间点都在第一列中,而“巨噬细胞频率”数据在第二列中。其余所有列代表其他单元格类型。 Here is a screenshot of my data spreadsheet
g=sns.catplot(data=df, x="Timepoint", y=df["B cell Frequency","Neutrophil Frequency","NK cell Frequency","Macrophage Frequency"],
palette = "Blues",
kind = "violin", split=True)
我得到“关键错误:('B细胞频率','中性粒细胞频率','NK细胞频率','巨噬细胞频率')”
我什至不想单独调用每一列。我希望代码遍历每一列(单元格类型)以收集数据并将每一列的数据放入其自己的绘图中。
g=sns.catplot(x = df["Timepoint"], y = df["Macrophage Frequency"], palette = "Blues", data=df, kind="violin")
它可以工作并产生小提琴图,但出现以下错误:“ ValueError:系列的真值不明确。请使用a.empty,a.bool(),a.item(),a.any()或a.all()。”
我想制作一个包含多个小提琴图的网格(X轴上的时间点,Y轴上的单元格类型的频率),其中每个图都从每一列获取数据。为什么只有将“ y”限制为数据框中的单个列时,我才成功?
我已经搜索了所有错误,但似乎无法对代码进行正确的更改。如果我更改了一项内容,则会收到一个新错误(例如“ TypeError:类型为'NonType'的对象没有len()”,“ ValueError:num必须为1 <= num <= 0,而不是1”,等等)
答案 0 :(得分:0)
使用此:
g = sns.catplot(x = "Timepoint", y = "Macrophage Frequency", palette = "Blues", data=df, kind="violin")
x
和y
只是df
中的列名。