seaborn.catplot

时间:2019-02-12 19:01:04

标签: python-3.x seaborn facet-grid violin-plot

我是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细胞频率','巨噬细胞频率')”

我什至不想单独调用每一列。我希望代码遍历每一列(单元格类型)以收集数据并将每一列的数据放入其自己的绘图中。

我将Catplot代码剥离了一些基本知识,看是否可行:

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”,等等)

1 个答案:

答案 0 :(得分:0)

使用此:

g = sns.catplot(x = "Timepoint", y = "Macrophage Frequency", palette = "Blues", data=df, kind="violin")

xy只是df中的列名。